在 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']]
我有这个型号:
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']]