4

考虑以下:

status = queryset.values('status').annotate(count=Count('status'))

其中status字段是一个CharFieldwith choices。这将产生一个字典列表,其中包含statusDB 值及其计数。

有没有办法聚合status并显示其显示值?我已经查看了_get_FIELD_display我可能可以模拟的代码,但是重复框架的内部代码感觉有点骇人听闻。

4

2 回答 2

4

如果不修改 SQL,您可能无法在 DB 级别轻松实现这一点。但是,由于get_FOO_displayModel级别上操作,您甚至不必_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())
于 2014-07-31T14:15:36.717 回答
1

看看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'))}
于 2014-07-31T14:18:09.033 回答