У меня есть эти модели:
class Product(..):
category = ForeignKey('InputCategory...
class InputCategory(MPTTModel):
route_to = ForeignKey('RoutingCategory...
class RoutingCategory(MPTTModel):
pass
Так что InputCategory
имеет много Products
, а RoutingCategory
имеет много InputCategory
объектов.
Я могу комментировать product_count
для InputCategory
:
InputCategory.objects.annotate(product_count=Count('products'))
Но мне нужно аннотировать product_count
на RoutingCategory
.
Как я могу это сделать?
Я попытался изменить Manager
для InputCategory
и сделать это:
RoutingCategory.objects.annotate(product_count=Sum('input_categories__product_count'))
Но там написано: FieldError: Unsupported lookup 'product_count' for AutoField or join on the field not permitted.
Очевидно, я должен переопределить связанный менеджер.
Вы знаете, как это сделать?
РЕДАКТИРОВАТЬ
@ Виллем Ван Онсем придумал ответ, который работает:
from django.db.models import Count
RoutingCategory.objects.annotate(
product_count=Count('input_categories__products')
)
Но я также аннотировал product_cumulative_count
, который считает продукты себя и всех предков InputCategory
. Я хотел бы получить доступ к этой сумме этих подсчетов также из RoutingCategory
.
Я не могу понять, как.