在Django ORM查询中注释时获取长名称

时间:2018-08-05 18:38:15

标签: django python-3.x django-models django-orm

我有这个模型:

class Rank(models.Model):
    RANK_TYPE_CHOICES = (
        ('O', 'Officer'),
        ('E', 'Enlisted'),
        ('V', 'Civilian'),
        ('C', 'Cadet'),
    )
    ShortName = models.CharField(max_length=50)
    LongName = models.CharField(max_length=500)
    Type = models.CharField(max_length=1, choices=RANK_TYPE_CHOICES, default='O')
    Genre = models.ForeignKey(Genre, on_delete=models.DO_NOTHING)
    Career = models.ForeignKey(Career, on_delete=models.DO_NOTHING)
    image = models.ForeignKey(Photos, on_delete=models.DO_NOTHING)

当我执行此ORM操作时:    models.Rank.objects.values('Type').annotate(total=Count('Type')).order_by()

我得到这个回应     <QuerySet [{'Type': 'O', 'total': 1}]>

正是我想要的。 但是,如您所见,它给了我简短的类型。如何显示长名称而不是类型选择短名称?

谢谢。

1 个答案:

答案 0 :(得分:1)

您将需要手动添加值。

rank_dict = dict(RANK_TYPE_CHOICES)
for obj in my_ranks:
    obj['full_type'] = rank_dict[obj['Type']]