Django - 使用 get_FOO_display 进行聚合

Azi*_*ari 5 django django-orm django-aggregation

考虑以下:

status = queryset.values('status').annotate(count=Count('status'))
Run Code Online (Sandbox Code Playgroud)

其中statusfield 是CharFieldwith choices。这将产生一个包含status数据库值及其计数的字典列表。

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

okm*_*okm 5

如果不破解 SQL,您可能无法在数据库级别轻松实现这一目标。但是,由于get_FOO_display在级别上操作Model,您甚至不必_get_FIELD_display手动修改或查找选择(如果以下方法不会花费您的服务器太多费用):

YourModel(status=status).get_status_display()
Run Code Online (Sandbox Code Playgroud)

因此

for s in queryset.values('status').annotate(count=Count('status')):
    print(queryset.model(status=s['status']).get_status_display())
Run Code Online (Sandbox Code Playgroud)