#django #django-queryset #django-database #django-aggregation #django-annotate
#django #django-набор запросов #django-база данных #django-агрегация #django-аннотировать
Вопрос:
У меня есть эти модели:
class Shop(..):
category = ForeignKey...
class Product(..):
shop = ForeignKey...
category = ForeignKey...
is_active = BooleanField...
class Category(..):
name = ...
Мне нужно аннотировать количество активных продуктов для каждой категории.
В основном это:
for cat in Category.objects.all():
count = Product.objects.filter(shop__category=cat)
Я пытался:
Category.objects.annotate(product_count=Count('shop__products'),filter=Q(shop__products__is_active=True))
django.core.exceptions.FieldError: Related Field got invalid lookup: is_active
Это вызывает ошибку. Вы знаете, как это аннотировать?
Комментарии:
1. Какая ошибка у вас есть?
2. @ArakkalAbu django.core.exceptions. Ошибка поля: в соответствующем поле получен неверный поиск: is_active
3. Кстати, из вашего сообщения неясно, как связаны
Shop
иProduct
. ИМХО, лучше добавить «соответствующую точную спецификацию модели» в вопросы, чтобы у вас была высокая вероятность получения точных ответов.
Ответ №1:
filter
должно быть аргументом Count
объекта:
Category.objects.annotate(product_count=Count('shop__products', filter=Q(shop__products__is_active=True)))