Подтвердить что ты не робот

Сравнение столбцов в Django-запросах

У меня есть следующая модель:

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