首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django ORM: and和exclude查询

Django ORM: and和exclude查询
EN

Stack Overflow用户
提问于 2015-10-30 02:38:22
回答 1查看 182关注 0票数 0

我要选择其中多个值大于0的项目。

代码语言:javascript
复制
class Item(models.Model):
    val1 = models.PositiveIntegerField()
    val2 = models.PositiveIntegerField()
    val3 = models.PositiveIntegerField()

我认为这些应该通过删除所有val都为0的项目来实现:

代码语言:javascript
复制
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。

如何编写查询?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-10-30 02:40:58

您可以使用链接的筛选器来执行此操作:

代码语言:javascript
复制
Item.objects.filter(val1__gt=0).filter(val2__gt=0).filter(val3__gt=0)

使用filter __gt仅选择大于该值的值。链接筛选器充当逻辑AND语句,因此这将排除所有三个值都为0的任何值。

编辑:

根据你澄清了你的实际需求的评论,这样的事情可能会奏效。(它未经过测试)

代码语言:javascript
复制
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)))

以正确的顺序绑定多个ANDOR操作符应该会得到所需的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33422146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档