【发布时间】:2018-05-27 05:21:22
【问题描述】:
我想组合两个查询集,或者更好的是,针对特定案例使用 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,而如果它与独立产品(没有父产品)相关,则它保持 product__product_class__track_stock,如我的初始查询集。
有没有办法做到这一点?还是我别无选择,只能使用 itertools.chain() 组合两个查询集?
【问题讨论】:
-
请发布您的模型.....另外,看看mptt,它可能更容易实现您正在寻找的东西。当您拥有一个产品的产品时会发生什么?...github.com/django-mptt/django-mptt
-
我编辑了我的问题,我认为模型太大,无法在此处发布(电子商务)。但是不能有产品的产品,它代表父/子关系或独立(单独)。
标签: django django-queryset django-oscar