gpt4 book ai didi

python - 使用注释时在 Django 中显示选择字段的名称

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:22 25 4
gpt4 key购买 nike

我试图在使用 annotate 时获取选项的显示名称,但我一直无法弄清楚。我有以下查询:

Survey.objects.values('what').annotate(count=Count('why')).order_by()

结果是:

[{'count': 34, 'what': u'a'}, 
{'count': 39, 'what': u'c'},
{'count': 40, 'wat': u'p'}]

但我想要一些显示选择字段名称而不是键的东西:

[{'count': 34, 'what': u'appreciative'}, 
{'count': 39, 'what': u'creative'},
{'count': 40, 'wat': u'promising'}]

我尝试了 get_what_display(如文档和有关此主题的其他 stackoverflow 答案中所述),但 django 抛出错误。即以下内容似乎不起作用

Survey.objects.values('get_what_display').annotate(count=Count('why')).order_by()

最佳答案

要在不遍历查询集的情况下完成此操作,您可以使用条件表达式来注释显示属性。带注释的属性可用于 .values()

from django.db.models import Case, CharField, Value, When

choices = dict(Survey._meta.get_field('what')[0].flatchoices)
whens = [When(what=k, then=Value(v)) for k, v in choices.items()]
survey_counts = (
Survey.objects
.annotate(get_what_display=Case(*whens, output_field=CharField()))
.values('get_what_display')
.annotate(count=Count('why'))
.order_by()
)

关于python - 使用注释时在 Django 中显示选择字段的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29420867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com