Django-使用get\u FOO\u显示进行聚合
考虑以下几点:Django-使用get\u FOO\u显示进行聚合,django,django-orm,django-aggregation,Django,Django Orm,Django Aggregation,考虑以下几点: status = queryset.values('status').annotate(count=Count('status')) 其中,status字段是一个带有选项的CharField。这将产生一个字典列表,其中包含状态DB值及其计数 是否有方法聚合状态并显示其显示值?我已经查找了\u get\u FIELD\u display的代码,我可能可以对其进行模拟,但重复框架的内部代码感觉有点不太正常。如果不修改SQL,您可能无法在DB级别轻松实现这一点。但是,由于get\u
status = queryset.values('status').annotate(count=Count('status'))
其中,status
字段是一个带有选项的CharField
。这将产生一个字典列表,其中包含状态
DB值及其计数
是否有方法聚合状态
并显示其显示值?我已经查找了\u get\u FIELD\u display
的代码,我可能可以对其进行模拟,但重复框架的内部代码感觉有点不太正常。如果不修改SQL,您可能无法在DB级别轻松实现这一点。但是,由于get\u FOO\u display
是在Model
级别上运行的,因此您甚至不必手动破解\u get\u FIELD\u display
或查找选项(如果以下方法不会使服务器花费太多):
因此
查看django.contrib.admin.util.display\u for_字段
函数。您必须找到字段对象:
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'))}
你能用输入->预期输出的例子更新你的问题吗?@Germano这个问题还不够清楚吗<代码>状态
->状态
与其显示值聚合我的错,我错过了该状态的选择。get\u FOO\u display
是动态添加的,它不能像您所说的那样使用,除非您另有意思。你能提供一个有效的例子吗?谢谢,这正是我想要的。这里的分类法说明了什么?既然status是他试图分组的列,为什么status不属于values args?我感兴趣的是在没有额外for循环的情况下完成这项工作。
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'))}