Лукап gt
Лукап gt (greater than) применяется в запросах Django ORM для выборки объектов, у которых значение указанного поля строго больше переданного значения. Он используется внутри метода filter, exclude или других методов, принимающих условия фильтрации. Лукап позволяет создавать гибкие условия сравнения для различных типов полей, включая числа, даты и время.
Синтаксис
Model.objects.filter(field__gt=value)
Где field - имя поля модели, а value - значение, с которым происходит сравнение. Результатом выполнения запроса будет QuerySet, содержащий объекты, у которых значение поля больше value.
Пример . Для числовых полей
Допустим, у нас есть модель Product с полем price. Найдем все товары с ценой больше 1000:
from myapp.models import Product
res = Product.objects.filter(price__gt=1000)
for product in res:
print(product.name, product.price)
Результат выполнения кода:
"Laptop 1500"
"Smartphone 1200"
"Tablet 1100"
Пример . Для полей с датой
Найдем все заказы, сделанные после определенной даты. Модель Order содержит поле created_at типа DateTimeField:
from myapp.models import Order
from datetime import datetime
date_from = datetime(2025, 1, 1)
res = Order.objects.filter(created_at__gt=date_from)
for order in res:
print(order.id, order.created_at)
Результат выполнения кода:
"1 2025-01-15 10:30:00"
"3 2025-02-01 14:20:00"
"5 2025-03-10 09:15:00"
Пример . Использование с цепочкой фильтров
Лукап gt можно комбинировать с другими условиями для уточнения запроса. Найдем товары с ценой больше 500 и количеством больше 10:
from myapp.models import Product
res = Product.objects.filter(price__gt=500, quantity__gt=10)
for product in res:
print(product.name, product.price, product.quantity)
Результат выполнения кода:
"Laptop 1500 25"
"Tablet 1100 15"
Пример . Использование с объектом F
Лукап gt может использоваться для сравнения значения поля с другим полем той же модели с помощью выражения F. Найдем товары, у которых цена больше скидки:
from myapp.models import Product
from django.db.models import F
res = Product.objects.filter(price__gt=F('discount'))
for product in res:
print(product.name, product.price, product.discount)
Результат выполнения кода:
"Laptop 1500 100"
"Smartphone 1200 50"
Пример . Использование с агрегацией
Лукап gt можно применять с аннотированными полями для фильтрации по вычисляемым значениям. Найдем товары, у которых средний рейтинг больше 4:
from myapp.models import Product, Review
from django.db.models import Avg
res = Product.objects.annotate(
avg_rating=Avg('review__rating')
).filter(avg_rating__gt=4)
for product in res:
print(product.name, product.avg_rating)
Результат выполнения кода:
"Laptop 4.5"
"Smartphone 4.2"