Django QuerySet:按另一个字段的值进行过滤

8
我有一个模型,希望按其属性a进行过滤。该模型还具有另一个属性b。我正在尝试过滤a为0或者a具有b属性的值(对于每一行)。如何通过另一列的值进行过滤?
以下是我尝试过的内容和缺失的部分:
MyModel.objects.filter(Q(a=0) | Q(a=???)) # ??? is to be the value of the `b` column

我正在使用Django 1.4,我知道这是一个旧版本,已不再得到支持,但不幸的是升级并不取决于我。


你有更改模型的选项吗? - almost a beginner
F表达式在1.4版本中可用,它正是您要寻找的。 - almost a beginner
2个回答

18

我认为您可以在Q对象中使用F表达式

MyModel.objects.filter(Q(a=0) | Q(a=F('b')))

我建议您现在安排升级,否则您将错过其他功能和安全修复。


哎呀,不知道为什么我一直以为F表达式是最近才引入的。谢谢。正如我所提到的,升级绝对不是我的职责,但我希望是这样的。 - dabadaba

6
您可以使用F模型来比较两个字段。
from django.db.models import F
MyModel.objects.filter(a__exact = F('b'))

因此,您可以使用类似以下的联合查询:

MyModel.objects.filter(Q(a=0) | Q(a__exact=F('b')))

这个代码会检查这两个值是否相同吗? - almost a beginner
哦,你的意思是a具有与b属性相等的值,很抱歉你的问题没有表达清楚,让我看看我能做些什么。 - Osiris92
回答问题前请仔细阅读问题。 - Iqbal
修改了我的回答,你还应该在问题中明确你的意思。 - Osiris92

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接