Django 添加Q过滤器,当相关对象存在时进行查询,条件查询
Django Add Q filters to query when related object exists, Conditional query
我正在尝试这样查询我的产品型号:
- 我有与用户相关的产品模型
- 我的用户可以有一个相关的商店,它的商店可以是不活跃的或不可见的
因此,我的产品可以由拥有商店的用户或 没有 商店的用户销售;我想要做的是在 "has_store" 条件 beign 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)
我希望已经清楚了,非常感谢你
我觉得你把事情想得太复杂了。 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
)
我正在尝试这样查询我的产品型号:
- 我有与用户相关的产品模型
- 我的用户可以有一个相关的商店,它的商店可以是不活跃的或不可见的
因此,我的产品可以由拥有商店的用户或 没有 商店的用户销售;我想要做的是在 "has_store" 条件 beign 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)
我希望已经清楚了,非常感谢你
我觉得你把事情想得太复杂了。 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
)