【问题标题】:get long name during annotate in django ORM query在 django ORM 查询中注释期间获取长名称
【发布时间】:2019-01-12 19:12:42
【问题描述】:

我有这个模型:

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

完全如我所愿。 但是,如您所见,它给了我短类型。如何让它显示长名称而不是类型选择短名称?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    您需要手动添加值。

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

    【讨论】:

    • 非常感谢!我要在这里给你支票,因为这确实有效。但是,我的问题比我想象的要多。我为扩展问题添加了另一个问题。谢谢!
    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 2019-05-09
    • 2021-01-24
    • 2020-01-26
    • 2018-08-26
    • 1970-01-01
    • 2011-12-11
    • 2017-07-22
    相关资源
    最近更新 更多