当前位置:  开发笔记 > 编程语言 > 正文

Django查询中的列比较

如何解决《Django查询中的列比较》经验,为你挑选了1个好方法。

我有以下型号:

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))

我想使用列名称(在我的情况下是里程数限制),而不是固定值.所以我希望能够做到这样的事情:

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')))

Ned Batcheld.. 8

如果没有自定义SQL,您现在无法执行此操作.django开发人员正致力于使F()函数成为可能:#7210 - F()语法,需要设计反馈.



1> Ned Batcheld..:

如果没有自定义SQL,您现在无法执行此操作.django开发人员正致力于使F()函数成为可能:#7210 - F()语法,需要设计反馈.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有