我想选择多个值大于0的项目。
class Item(models.Model):
val1 = models.PositiveIntegerField()
val2 = models.PositiveIntegerField()
val3 = models.PositiveIntegerField()
我认为这可以通过消除所有val
为0的项目来实现:
Item.objects.exclude(val1=0, val2=0, val3=0)
Item.objects.exclude(Q(val1=0) & Q(val2=0) & Q(val3=0))
它们都消除了val
为零的每个项目,并且仅返回所有val
s大于0的项目。我不想OR
组合但是找到一个通用表达式,因为val
s可以大于3.
如何编写查询?感谢。
答案 0 :(得分:0)
您可以使用链接过滤器执行此操作:
Item.objects.filter(val1__gt=0).filter(val2__gt=0).filter(val3__gt=0)
使用过滤器__gt
仅选择大于该值的值。链接过滤器充当逻辑AND
语句,因此这将排除所有三个值为0的任何值。
编辑:
根据您的评论澄清您的实际需求,这样的事情可能有用。 (未经测试)
Item.objects.filter((Q(val1__gt=0) & Q(val2__gt=0)) |
(Q(val2__gt=0) & Q(val3__gt=0)) |
(Q(val1__gt=0) & Q(val3__gt=0)))
以正确的顺序绑定多个AND
和OR
运算符可以满足您的需求。