从Django模型的选择中获得人类可读名称的实际值

时间:2019-02-27 16:19:59

标签: django django-models django-views

我制作了这个模型:

name = models.CharField(max_length=3, choices=(
        ('sat', "Saturday"),
        ('sun', "Sunday"),
        ('mon', "Monday"),
        ('tue', "Tuesday"),
        ('wed', "Wednesday"),
        ('thu', "Thursday"),
        ('fri', "Friday"),
    ), null=False, blank=False, primary_key=True)

,当我想获取对象时,只能访问人类可读的选择名称。 如何通过人类可读的名称获取对象? 我试过了,但是出现了错误:

Days.objects.get(name='saturday')

3 个答案:

答案 0 :(得分:0)

这不是很漂亮,但是您可以通过models元属性来反向查找:

CeleryExecutor

您可以将其修改为不区分大小写(以便在您的示例中可以使用)

但是要小心:

  • 人类可读的字符串不能唯一!
  • 如果在选项中找不到人类可读的字符串,则会返回一个虚拟字符('NUL')-但这可能会在以后添加,并导致混淆

答案 1 :(得分:0)

我不明白为什么您不打算使用它们而使用简短版本。我会使用相同的名称两次,例如:

choices=(
            ('Saturday', "Saturday"),
            ('Sunday', "Sunday"),
            ('Monday', "Monday"),
            ('Tuesday', "Tuesday"),
            ('Wednesday', "Wednesday"),
            ('Thursday', "Thursday"),
            ('Friday', "Friday"),
         )

然后

Days.objects.get(name='saturday')

显然可以正常工作,并且您的代码添加了零复杂度。在类似的旧帖子here

中也建议这样做

答案 2 :(得分:0)