Как получить диапазон цен с помощью django?
у меня есть ценовая модель
class Product(models.Model):
price = models.IntegerField
membership_discount = models.DecimalField
если я получаю параметр цены, (например, min_price = 100000, max_price = 500000)
Я хочу получить продукты, умноженные на поля price и membership_discount.
не это
Product.objects.filter(price__range = (min_price, max_price))
я хочу
Product.objects.filter(price * (1+membership_discount)__range = (min_price, max_price))
lte
= меньше или равно
gte
= больше или равно
это документация: https://docs.djangoproject.com/en/4.0/ref/models/querysets/#gt
max_price = #max price logic here
min_price = #min price logic her
#this will filter all products (price <= max_price and price >= min_price)
Product.objects.filter(price__lte = max_price, price__gte = min_price)
Вы можете использовать аннотации для QuerySet и применять фильтр по аннотации.
Product.objects.annotate(
member_price=F('price') * (1 + F('membership_discount'))
).filter(
member_price__range=(min_price, max_price)
)
Если поле price
и поле membership_dicsount
не имеют одинакового типа, вам может понадобиться использовать ExpressionWrapper
с определенным output_field
Product.objects.annotate(
member_price=ExpressionWrapper(
F('price') * (1 + F('membership_discount')),
output_field=DecimalField()
)
).filter(
member_price__range=(min_price, max_price)
)
Docs: