在 django ORM 查询中注释期间获取长名称

get long name during annotate in django ORM query

我有这个型号:

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}]>

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

谢谢。

您需要手动添加这些值。

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