Самый быстрый способ подсчета мультомании 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()