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