python - Django 查询中的列比较

标签 python django orm

我有以下模型:

class Car(models.Model):
    make = models.CharField(max_length=40)
    mileage_limit = models.IntegerField()
    mileage = models.IntegerField()

我想选择里程小于 mileage_limit 的所有汽车,所以在 SQL 中它会是这样的:

select * from car where mileage < mileage_limit;

在 Django 中使用 Q 对象,我知道我可以将列与任何值/对象进行比较,例如如果我想买里程数少于 100,000 的汽车,它会是这样的:

cars = Car.objects.filter(Q(mileage__lt=100000))

我想使用列名而不是固定值(在我的例子中是 mileage_limit)。所以我希望能够做类似的事情:

cars = Car.objects.filter(Q(mileage__lt=mileage_limit))

但是这会导致错误,因为它需要一个值/对象,而不是列名。有没有办法使用 Q 对象比较两列?我觉得这将是一个非常常用的功能,应该有一种简单的方法可以做到这一点,但是在文档中找不到任何相关信息。

注意:这是一个简化的示例,似乎没有必要使用 Q 对象。然而,真实模型有更多列,真实查询更复杂,这就是我使用 Q 的原因。在这个问题中,我只是想具体了解如何使用 Q 比较列。

编辑

显然在 Django 1.1 发布后,可以执行以下操作:

cars = Car.objects.filter(mileage__lt=F('mileage_limit'))

仍然不确定 F 是否应该像这样与 Q 一起工作:

cars = Car.objects.filter(Q(mileage__lt=F('mileage_limit')))

最佳答案

如果没有自定义 SQL,您现在无法执行此操作。 Django 开发人员正在开发一个 F() 函数,使之成为可能:#7210 - F() syntax, design feedback required.

关于python - Django 查询中的列比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/433294/

相关文章:

Hibernate @Generated 注释不能很好地工作

python - 如何查找不属于字符串的某些字符? (正则表达式、Python)

python - 使用方法自动验证函数参数

使用json的python程序无法正常运行

python - Django - 在保存方法中执行查询

android - 绿道。 N :M relation

Python 使用时区偏移量转换日期/时间字符串

mysql - Django:如何处理模型子类化和 IntegrityErros?

django - docker容器已构建并正在运行但无法正常工作

java - 如何使用 OrmLite 连接到受密码保护的 SQLite 数据库?