考虑以下:
status = queryset.values('status').annotate(count=Count('status'))
其中status
字段是一个CharField
with choices
。这将产生一个字典列表,其中包含status
DB 值及其计数。
有没有办法聚合status
并显示其显示值?我已经查看了_get_FIELD_display
我可能可以模拟的代码,但是重复框架的内部代码感觉有点骇人听闻。
考虑以下:
status = queryset.values('status').annotate(count=Count('status'))
其中status
字段是一个CharField
with choices
。这将产生一个字典列表,其中包含status
DB 值及其计数。
有没有办法聚合status
并显示其显示值?我已经查看了_get_FIELD_display
我可能可以模拟的代码,但是重复框架的内部代码感觉有点骇人听闻。
如果不修改 SQL,您可能无法在 DB 级别轻松实现这一点。但是,由于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())
看看django.contrib.admin.util.display_for_field
功能。您必须找到字段对象:
field = queryset.model._meta.get_field('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'))}