我要选择其中多个值大于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大于0的项。我不想对组合进行OR,但要找到一个通用表达式,因为vals可以大于3。
如何编写查询?谢谢。
发布于 2015-10-30 02:40:58
您可以使用链接的筛选器来执行此操作:
Item.objects.filter(val1__gt=0).filter(val2__gt=0).filter(val3__gt=0)使用filter __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操作符应该会得到所需的结果。
https://stackoverflow.com/questions/33422146
复制相似问题