【问题标题】:Django QuerySet: filter by the value of another fieldDjango QuerySet:按另一个字段的值过滤
【发布时间】:2017-04-19 09:38:22
【问题描述】:

我有一个模型,我希望通过其属性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,我知道它是一个不再受支持的旧版本,但不幸的是,我无法执行升级。

【问题讨论】:

  • 您可以选择更换模型吗?
  • F 表达式在 1.4 中可用,它正是你要找的。​​span>

标签: python django django-1.4


【解决方案1】:

我认为您可以将F expression 与您的 Q 对象一起使用:

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

我还建议您立即安排升级,否则您将错过其他功能和安全修复程序。

【讨论】:

  • 嗯,出于某种原因,我认为F 表达式是最近才引入的。谢谢你。正如我所提到的,升级绝对不是由我决定的,我希望是。
【解决方案2】:

您可以使用 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')))

【讨论】:

  • 这是否检查两个值是否相同?
  • 哦,你的意思是 a 的值等于 b 属性,抱歉你的问题不清楚,让我看看我能做什么。
  • 回答前请仔细阅读问题。
  • 编辑了我的答案,你也应该明确你在问题中的意思。
猜你喜欢
  • 1970-01-01
  • 2017-10-12
  • 2021-09-18
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多