我需要找到状态为“已完成”的所有订单项目的订单。看起来是这样的:

FINISHED_STATUSES = [17,18,19]
if active_tab == 'outstanding':
    orders = orders.exclude(items__status__in=FINISHED_STATUSES)

但是,此查询只提供状态为“已完成”的任何订单项的订单。如何进行查询,以便仅检索具有已完成状态的所有订单项的订单?

最佳答案

我认为您需要在这里进行原始查询:
将订单和物料模型设置为订单和物料:

# 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查询-全部获取,而非全部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15284978/

10-14 08:10