Details.objects.all()
Dept Gender Shift
Software Male Day
Software2 Female Night
我想要的是json像{“Gender”:“Male”,“count”:2}使用queryset。 count是特定部门中男性和女性的数量。
我对djnago很新,并试过这个
Details.objects.values("Gender").annotate(count=Count("Gender")).order_by("Shift")
我得到的地方
[{'count': 3, 'Gender': u'Female'}, {'count': 1, 'Gender': u'Male'}, {'count': 3, 'Gender': u'Female'}, {'count': 3, 'Gender': u'Male'}]
这两个部门......我一次只想要一个部门(Software / Software2)。请帮忙:)谢谢。
答案 0 :(得分:1)
以下查询将gender和department作为输入,并在JSON中将计数作为输出。
day_male_count = Details.objects.filter(gender='Male', department='Software', shift='Day').count()
night_male_count = Details.objects.filter(gender='Male', department='Software', shift='Night').count()
我觉得这可能不是你要问的,是吗?
答案 1 :(得分:0)
Django ORM使用注释和聚合很难做到这一点所以我选择了更纯粹的python方法。
from collections import Counter
d = list(Details.objects.values_list('Dept', 'Gender', 'Shift'))
response = [i + (c[i],) for i in Counter(d)]
我们正在做的是将行作为元组拉出,然后将它们传递给python Counter
,它返回一个类似dict的对象,其中键是原始元组,值是对的数量的计数元组出现。
这给出了:
[
('software1', 'male', 'night', 2),
('software1', 'female', 'day', 1),
('software2', 'male', 'day', 1),
('software2', 'female', 'day', 1),
('software1', 'female', 'night', 1)
]
为了证明我们运行的结果:
final = [{'Dept': i[0], 'Gender': i[1], 'Shift': i[2], 'Count': i[3]} for i in response]
希望我帮助过。