Самый быстрый способ подсчета мультомании Django?

Какой самый быстрый способ подсчета мунитоманий Django?

У меня есть сотни тысяч строк данных, и я хочу подсчитать ответы.

Нужны:

  • сколько объектов, где ответ не является null
  • и количество ответов на вариант.

Модели:

class Option(models.Model):
    text = models.CharField(max_length=255, blank=False)

class MultiChoiceAnswer(models.Model):
    user = models.ForeignKey(User)
    answers = models.ManyToManyField(
        Option,
        blank=True,
        verbose_name=_("options"),
    )

Для подсчета используйте Django's annotate() вместе с Count. Для фильтрации отношений, которые не являются нулевыми, вы можете просто exclude() все строки, где отношение равно None.

# Answers per Option
qs = Option.objects.annotate(answer_count=Count("multi_choice_answer_set"))
for option in qs:
    print(option, option.answer_count)

# Answers is not null
count = MultiChoiceAnswer.objects.exclude(answers=None).count()
Вернуться на верх