Django查询中的列比较 [英] Column comparison in Django queries

查看:112
本文介绍了Django查询中的列比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个以下模型:

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

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

I want to select all cars where mileage is less than mileage_limit, so in SQL it would be something like:

select * from car where mileage < mileage_limit;

在Django中使用Q对象,我知道我可以将列与任何值/对象进行比较。如果我想得到里程少于10万的汽车,那就像这样:

Using Q object in Django, I know I can compare columns with any value/object, e.g. if I wanted to get cars that have mileage say less than 100,000 it would be something like:

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

而不是固定值,我想使用列名(在我的情况下,它是mileage_limit)。所以我想要做一些如下的事情:

Instead of a fixed value I would like to use the column name (in my case it is mileage_limit). So I would like to be able to do something like:

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

然而,这会导致错误,因为它期待一个值/对象,而不是列名。有没有办法比较使用Q对象的两列?我觉得这是一个非常常用的功能,应该有一个简单的方法来做到这一点,但在文档中找不到任何东西。

However this results in an error, since it is expecting a value/object, not a column name. Is there a way to compare two columns using Q object? I feel like it would be a very commonly used feature and there should be an easy way to do this, however couldn't find anything about it in the documentation.

注意:这是一个简化的例子,使用Q对象可能是不必要的。然而,真正的模型有更多的列,真正的查询更复杂,这就是为什么我使用Q.在这个问题中,我只是想弄清楚如何比较使用Q的列。

编辑

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

Apparently after release of Django 1.1 it would be possible to do the following:

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

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

Still not sure if F is supposed to work together with Q like this:

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


推荐答案

如果没有自定义SQL,则无法执行此操作。 django开发人员正在使用一个F()函数来实现:#7210 - F()语法,需要设计反馈。

You can't do this right now without custom SQL. The django devs are working on an F() function that would make it possible: #7210 - F() syntax, design feedback required.

这篇关于Django查询中的列比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆