У меня есть следующая модель:
class Car(models.Model):
make = models.CharField(max_length=40)
mileage_limit = models.IntegerField()
mileage = models.IntegerField()
Я хочу выбрать все автомобили, у которых пробег меньше, чем micycle_limit, поэтому в SQL это будет выглядеть примерно так:
select * from car where mileage < mileage_limit;
Используя объект Q в Django, я знаю, что могу сравнивать столбцы с любым значением / объектом, например, если бы я хотел получить автомобили с пробегом менее 100 000, это было бы что-то вроде:
cars = Car.objects.filter(Q(mileage__lt=100000))
Вместо фиксированного значения я хотел бы использовать имя столбца (в моем случае это micycle_limit). Поэтому я хотел бы иметь возможность сделать что-то вроде:
cars = Car.objects.filter(Q(mileage__lt=mileage_limit))
Однако это приводит к ошибке, так как он ожидает значение / объект, а не имя столбца. Есть ли способ сравнить два столбца, используя объект Q? Я чувствую, что это будет очень часто используемая функция, и должен быть простой способ сделать это, однако ничего не могу найти в документации.
Примечание: это упрощенный пример, для которого использование объекта Q может показаться ненужным. Однако реальная модель имеет гораздо больше столбцов, а реальный запрос более сложный, поэтому я использую Q. Здесь в этом вопросе я просто хотел выяснить, как конкретно сравнивать столбцы с использованием Q.
EDIT
По-видимому, после выпуска Django 1.1 можно будет сделать следующее:
cars = Car.objects.filter(mileage__lt=F('mileage_limit'))
Все еще не уверен, должен ли F работать вместе с Q следующим образом:
cars = Car.objects.filter(Q(mileage__lt=F('mileage_limit')))