我需要找到一个订单,其中所有订单商品的状态都为已完成。它看起来像这样:
FINISHED_STATUSES = [17,18,19]
if active_tab == 'outstanding':
orders = orders.exclude(items__status__in=FINISHED_STATUSES)
但是,此查询仅向我提供具有已完成状态的任何 订单项的订单。我将如何进行查询,以便我只检索那些具有 ALL 已完成状态的订单项目的订单?
最佳答案
我认为你需要在这里做原始查询:
将您的订单和商品模型设置为订单和商品:
# raw query
sql = """\
select `orders`.* from `%{orders_table}s` as `orders`
join `%{items_table}s` as `items`
on `items`.`%{item_order_fk}s` = `orders`.`%{order_pk}s`
where `items`.`%{status_field}s` in (%{status_list}s)
group by `orders`.`%{orders_pk}s`
having count(*) = %{status_count)s;
""" % {
"orders_table": Orders._meta.db_table,
"items_table": Items._meta.db_table,
"order_pk": Orders._meta.pk.colum,
"item_order_fk":Items._meta.get_field("order").colum,
"status_field": Items._meta.get_field("status").colum,
"status_list": str(FINISHED_STATUSES)[1:-1],
"status_count": len(FINISHED_STATUSES),
}
orders = Orders.objects.raw(sql)
关于python - 基于FK的Django查询——get all,not any,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15284978/