Как агрегировать аннотированные поля связанных моделей в django
Моя проблема немного сложнее, но я размещаю вопрос в максимально простой форме.
- Аннотация
total_score
вPhoto
. - Я хотел бы аннотировать
max_total_score
вPerson
.
Я написал get_queryset
из PersonManager
, но произошла следующая ошибка.
Есть ли новый способ?
models.py
from django.db import models
class PersonManager(models.Manager):
def get_queryset(self):
photos_prefetch = models.Prefetch(
'photos',
Photo.objects.annotate(total_score=models.Sum('features__score'))
)
return super().get_queryset() \
.prefetch_related(photos_prefetch) \
.annotate(max_total_score=models.Max('photos__total_score'))
class Person(models.Model):
objects = PersonManager()
class Photo(models.Model):
person = models.ForeignKey(Person, models.CASCADE, related_name='photos')
class Feature(models.Model):
photo = models.ForeignKey(Photo, models.CASCADE, related_name='features')
name = models.CharField(max_length=100)
score = models.IntegerField()
оболочка
>> Person.objects.all()
# Unsupported lookup 'total_score' for BigAutoField or join on the field not permitted