Аннотация Django queryset, возвращающая сгруппированные подсчеты

Я использую Django 3.2

models.py

class AwardCategory(models.Model)
    name = models.CharField(max_length=16)
    slug = models.SlugField(max_length=16, unique=True, db_index=True)

class Award(models.Model):
    name = models.CharField(max_length=16)
    category = models.ForeignField(AwardCategory, on_delete=models.CASCADE)

class CeremonyAward(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="awards", on_delete=models.CASCADE )
    award = models.ForeignKey(Award, related_name="ceremonies", on_delete=models.CASCADE )

Я хочу написать запрос, который возвращает для заданного пользователя (или списка user_ids):

 award_category:
    name
    number_of_awards_in_category

Я знаю, что должен использовать аннотации, но я совсем новичок в аннотациях.

Вот что у меня есть на данный момент:

user_ids = (someuser.id,)
CeremonyAward.objects.filter(user_id__in=user_ids).\
                                    annotate(Count('award__category__slug', distinct=True)).\
                                    prefetch_related('award','award_category')

Как создать запрос, который группирует по award__category, а затем подсчитывает награды в каждой отдельной категории

Вернуться на верх