请考虑以下事项:
status = queryset.values('status').annotate(count=Count('status'))
其中status
字段是CharField
choices
。这将生成一个字典列表,其中包含status
DB值及其计数。
有没有办法汇总status
并显示其显示值?我查了_get_FIELD_display
的代码,我可能会仿效,但重复框架的内部代码感觉有些不自在。
答案 0 :(得分:2)
如果不破解SQL,您可能无法轻松地在数据库级别实现此目的。但是,由于get_FOO_display
在Model
级别上运行,您甚至不必手动修改_get_FIELD_display
或查找选项(如果以下方法不会使您的服务器花费太多) :
YourModel(status=status).get_status_display()
因此
for s in queryset.values('status').annotate(count=Count('status')):
print(queryset.model(status=s['status']).get_status_display())
答案 1 :(得分:0)
查看django.contrib.admin.util.display_for_field
功能。你必须找到字段对象:
field = next(field for field in queryset.model._meta.fields
if field.name == 'status')
然后您可以将其用作:
display_for_field(status, field)
或者,在您的情况下:
{ unicode(display_for_field(t['status'], field)): t['count']
for t in queryset.values('taxonomy').annotate(count=models.Count('taxonomy'))}