python - 基于FK的Django查询——get all,not any

标签 python mysql django

我需要找到一个订单,其中所有订单商品的状态都为已完成。它看起来像这样:

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/

相关文章:

php - PHP中 undefined index 通知

mysql - 为电子商务网站编写 SOLR 搜索查询的最佳实践是什么

django - 如何让 HttpResponse 打印新行?

mysql - Django-Mysql数据迁移

Python 循环嵌套数组

python - 使用 Selenium 在 Web 表单结果中查找元素时出错

python - 在Python中获取__future__函数的参数名称

Python:在不拆分数据的情况下转义特殊字符

python - 我收到了 “nonetype”错误,但我不知道为什么

Django : save the user that has created the object instance