我想组合两个查询集,或者更好,只使用一个特定情况的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
组合两个查询集?
答案 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)