Как выполнить такую фильтрацию
Есть объекты товаров, собранные в кверисете qs. У каждого такого объекта есть несколько складов. В запросе я обращаюсь к сету складов через имя in_stocks. Мне нужно отфильтровать товары по минимальному суммарному количеству на складах. Например, чтобы на всех складах в сумме было не менее 100 таких товаров. Я делаю это так:
qs = qs.annotate(all_qty=Sum('in_stocks__count')).filter(all_qty__gte=100)
Кроме количества, в модели товара на складе хранится еще информация о цене (price). Как мне использовать в рассчете суммарного количества только те склады, в которых price соответствует определенному условию?
Например отфильтровать товары с суммарным количеством на складах не менее 1000 с ценой на складе не более 5000.
Ответы (1 шт):
Автор решения: Константин Комиссаров
→ Ссылка
from django.db.models import Q, Sum
max_price = Q(in_stocks__price__lte=5000)
qs = qs.annotate(all_qty=Sum(
'in_stocks__count',
filter=max_price)).filter(all_qty__gte=100)