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
)