Queryset过滤器使用Case / When for Model字段,而不是字段值

时间:2017-12-13 10:39:35

标签: django django-queryset django-oscar

我想组合两个查询集,或者更好,只使用一个特定情况的Case / When语法。

我在documentation中看到它可以用于查询集过滤,而不仅仅是注释,这正是我需要的。但是,我想对模型字段本身使用Case / When,而不是字段的值。

该项目是一个电子商务,我使用django-oscar所以模型非常大,可以在这里发布。要知道的是,篮子线是指产品,产品可以是父母,儿童或独立产品。

这是我的代码:

self.in_stock_lines = basket.lines.filter(product__product_class__track_stock=True, is_customized=False)

事情是,如果篮子线与作为孩子的产品有关,我必须过滤的字段是product__parent__product_class__track_stock,而如果它与独立产品(没有父母)有关,则它会保持{{1在我的初始查询集中。

有办法做到这一点吗?或者我别无选择,只能使用product__product_class__track_stock组合两个查询集?

1 个答案:

答案 0 :(得分:1)

您可以使用Q个对象。

from django.db.models import Q

basket.lines.filter(
  Q(product_parent__isnull=True, product__product_class__track_stock=True) | 
  Q(product__parent__product_class__track_stock=True), is_customized=False)