Django:聚合 QuerySet 结果的更好方法

Django: Better way to aggregate QuerySet results

我有以下代码片段。我首先尝试直接将男性/女性的计数作为注释,但我没有设法得到这些。因此我写了下面的for循环。但是,它仍然觉得这个解决方案并没有想象中的那么好。您还有其他想法如何在此处编写更好的代码吗?

genders = self.get_answers(self.get_super_guests(), QuestionFocus.GENDER)
# >>> <QuerySet [Answer: Male, Answer: Female, Answer: Male]>
male = female = 0
for gender in genders:
    if gender.answer == "Male":
        male += 1
    elif gender.answer == "Female":
        female += 1

print("Gender distribution is Male", male, "Female: ", female)

您可以用项目的数量注释查询集的值,例如:

result = genders.values('answer').annotate(
    number=Count('answer')
).order_by('answer')

这将导致 QuerySet 看起来像:

<QuerySet [
    { 'answer': 'Male', 'number': 14},
    { 'answer': 'Female', 'number': 25}
]>
# if your model name is QuestionFocus, then your query should be like this

QuestionFocus.objects.values('answer').annotate(number=Count('answer'))