要么?

我将如何做一个“或”在Django过滤器。

基本上,我希望能够列出用户添加的项目(它们被列为创建者)或项目已被批准

所以我基本上需要选择

item.creator = owner or item.moderated = False

我如何在Django中执行此操作(最好使用filter / queryset)


Q对象允许进行复杂的查找。 例:

from django.db.models import Q

Item.objects.filter(Q(creator=owner) | Q(moderated=False))

您可以使用| 运算符直接组合查询集而不需要Q对象:

result = Item.objects.filter(item.creator = owner) | Item.objects.filter(item.moderated = False)

(编辑 - 我最初不确定这是否会导致额外的查询,但@ spookylukey指出懒惰的查询集评估需要照顾)


你想使过滤器动态,那么你必须使用Lambda

from django.db.models import Q

brands = ['ABC','DEF' , 'GHI']

queryset = Product.objects.filter(reduce(lambda x, y: x | y, [Q(brand=item) for item in brands]))

reduce(lambda x, y: x | y, [Q(brand=item) for item in brands])相当于

Q(brand=brands[0]) | Q(brand=brands[1]) | Q(brand=brands[2]) | .....
链接地址: http://www.djcxy.com/p/6579.html

上一篇: or?

下一篇: How do I do a not equal in Django queryset filtering?