Python Django查询中的列比较

Python Django查询中的列比较,python,django,orm,Python,Django,Orm,我有以下型号: class Car(models.Model): make = models.CharField(max_length=40) mileage_limit = models.IntegerField() mileage = models.IntegerField() 我想选择里程数小于里程数限制的所有汽车,因此在SQL中,它类似于: select * from car where mileage < mileage_limit; cars = C

我有以下型号:

class Car(models.Model):
    make = models.CharField(max_length=40)
    mileage_limit = models.IntegerField()
    mileage = models.IntegerField()
我想选择里程数小于里程数限制的所有汽车,因此在SQL中,它类似于:

select * from car where mileage < mileage_limit;
cars = Car.objects.filter(Q(mileage__lt=100000))
cars = Car.objects.filter(Q(mileage__lt=mileage_limit))
我希望使用列名而不是固定值(在我的例子中,它是Milements_limit)。因此,我希望能够做到以下几点:

select * from car where mileage < mileage_limit;
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')))

如果没有自定义SQL,您现在无法执行此操作。django开发人员正在开发一个F()函数,该函数将使之成为可能:

我正在查看罚单7210接缝,就像这个问题已经解决了一样。有人知道它什么时候发布吗?它是1.1版本的一部分吗?它应该是Django 1.1的一部分,Django 1.1定于3月份发布。不过,它可能会更快地进入SVN主干,所以您可以从那里使用它。现在它位于Django SVN主干中,所以如果您需要,可以获取它。