У меня есть следующая модель:
class Car(models.Model):
make = models.CharField(max_length=40)
mileage_limit = models.IntegerField()
mileage = models.IntegerField()
Я хочу выбрать все автомобили, где пробег меньше пробега_limit, поэтому в SQL это будет примерно так:
select * from car where mileage < mileage_limit;
Используя объект Q в Django, я знаю, что могу сравнивать столбцы с любым значением/объектом, например. если бы я хотел получить автомобили с пробегом меньше 100 000, это было бы что-то вроде:
cars = Car.objects.filter(Q(mileage__lt=100000))
Вместо фиксированного значения я хотел бы использовать имя столбца (в моем случае это пробег_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')))