Как агрегировать аннотированные поля связанных моделей в django

Моя проблема немного сложнее, но я размещаю вопрос в максимально простой форме.

  1. Аннотация total_score в Photo.
  2. Я хотел бы аннотировать 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
Вернуться на верх