Объединяйте и объединяйте Django моделей - PullRequest
0 голосов
/ 31 января 2020

У меня следующая структура модели в Django.

class Group(Model):
    name = CharField()

class Category(Model):
    name = CharField()

class User(Model):
    name = CharField()
    group = ForeignKey(Group)

class Answer(Model):
    user = ForeignKey(User)
    category = ForeignKey(Category)
    answer = BooleanField()

Из этих данных я хочу посчитать, сколько положительных ответов у меня есть для каждой категории и для каждой группы. Примерно так:

results = {}
for category in Category.objects.all():
    results[category.name] = Group.objects.annotate(
        total=Count(
            'user__answer', filter=Q(
                user__answer__answer=True, user__answer__category=category
            )
        )
    )

Но есть ли лучший способ сделать это? Можно ли это сделать одним запросом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...