Django添加Q过滤器以查询相关对象存在时,条件查询
Posted
技术标签:
【中文标题】Django添加Q过滤器以查询相关对象存在时,条件查询【英文标题】:Django Add Q filters to query when related object exists, Conditional query 【发布时间】:2020-06-19 15:13:29 【问题描述】:我正在尝试这样查询我的产品型号:
我有与用户相关的产品模型 我的用户可以有一个相关的商店,它的商店可以是非活动的或不可见的因此,我的产品可以由拥有商店的用户或没有商店的用户销售;我想要做的是在 "has_store" 条件像这样为 True 时添加这些额外参数的查询。
store_query = ("seller__user_store__is_active": True,
"seller__user_store__is_visible": True
if F("seller__user_store__isnull=False") else )
然后将该查询添加到我的过滤语句中:
Product.objects.filter(Q(is_new=True) & Q(is_active=True), **store_query)
我的产品模型还有is_new、is_active等参数。
因此,如果产品卖家有相关商店,则预期行为类似于添加 Q(seller__user_store__is_visible=True)
和 Q(seller__user_store__is_active=True)
我希望已经清楚了,非常感谢你
【问题讨论】:
【参考方案1】:我认为你把事情弄得太复杂了。 stored_query
就相当于:
Q(seller__user_store=None) | Q(seller__user_store__is_active=True, seller__user_store__is_visible=True)
确实,万一seller__user_store=None
,就不用看卖家的条件了,不然会的。因此,我们可以将其实现为:
Product.objects.filter(
Q(seller__user_store=None) | Q(seller__user_store__is_active=True, seller__user_store__is_visible=True),
is_new=True, is_active=True
)
【讨论】:
以上是关于Django添加Q过滤器以查询相关对象存在时,条件查询的主要内容,如果未能解决你的问题,请参考以下文章