首页 > 解决方案 > Django:聚合查询集结果的更好方法

问题描述

我有以下代码片段。我首先尝试直接获取男性/女性的计数作为注释,但我没有设法得到这些。因此,我编写了以下 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)

标签: pythondjangodjango-queryset

解决方案


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

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

这将导致QuerySet如下所示:

<QuerySet [
    { 'answer': 'Male', 'number': 14},
    { 'answer': 'Female', 'number': 25}
]>

推荐阅读