要么?
我将如何做一个“或”在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?