Aus*_*tin 1 django django-aggregation
我有一个名为的ValuesQuerySet data.
我试图得到每个对象的所有类型的摘要计数
data.values('type') 产生这个输出:
[{'type': u'internal'}, {'type': u'internal'}, {'type': u'external'}, {'type': u'external'}]
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的细分(可以有更多的内部'和'外部'作为选择.这可能有多达20种不同的类型:
internal: 2
external: 2
Run Code Online (Sandbox Code Playgroud)
我正在尝试这个,但它只是返回一个空字典......
data.values('type').aggregate(Count('type'))
Run Code Online (Sandbox Code Playgroud)
Annotate也产生了不受欢迎的结果:
data.values('type').annotate(Count('type'))
[{'type': u'internal', 'type_count': 1}, {'type': u'internal', 'type_count': 1}, {'type': u'external', 'type_count': 1}, {'type': u'external', 'type_count': 1}]
Run Code Online (Sandbox Code Playgroud)
Models.py
class Purchase(models.Model):
type = models.ForeignKey(Types)
Run Code Online (Sandbox Code Playgroud)
lists = ModelName.objects.values('type').annotate(count=Count('type'))
Run Code Online (Sandbox Code Playgroud)
在html中:
{% for list in lists %}
{{list.type}} - {{list.count}}<br/>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
测试:
{{lists}}
//don't use forloop yet. This will tests if the above query produce data or it is empty
Run Code Online (Sandbox Code Playgroud)
更新:
def view_name(request):
lists = ModelName.objects.values_list('type', flat=True).distinct()
types = []
for list in lists:
type_count = ModelName.objects.filter(type=list.type).count()
types.append({'type': list.type, 'count': type_count})
return render(request, 'page.html', {
'types': types,
})
{% for type in types %}
{{type.type}} - {{type.count}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |