Django;使用枚举作为选择来获得选择显示值

时间:2018-11-03 09:17:46

标签: python django

我有一个Django模型,其中使用了choices参数。对于选择,我使用的是Python枚举。现在,我想在模板中显示选择显示值。我知道有.get_fieldname_display,但是在这种情况下,它只是返回键而不是显示值。

型号:

class LocalTitle(models.Model):
    type = models.CharField(max_length=8, choices=[(tag, tag.value) for tag in LocalTitleCodes])
    title = models.CharField(max_length=255)

枚举:

class LocalTitleCodes(Enum):
     title_00 = 'Japanese'
     title_01 = 'English'
     title_02 = 'French'

因此,就我而言,如果我在模板中执行title.get_type_display,它将返回title_00而不是Japanese。如何获得显示值?

如果有关系,我正在使用Django 2.1和Python 3.6。

2 个答案:

答案 0 :(得分:1)

class LocalTitle(models.Model):
    LOCALCODES = (
     ('title_00' , 'Japanese')
     ('title_01' ,'English')
     ('title_02' , 'French')
)
    type = models.CharField(max_length=8, choices=LOCALCODES)
    title = models.CharField(max_length=255)

或者您可以这样选择。

答案 1 :(得分:1)

我认为问题更多是tag不会映射到title__00,而是映射到LocalTitleCodes对象。

您应该使用:

class LocalTitle(models.Model):
    type = models.CharField(
        max_length=8,
        choices=[(tag.name, tag.value) for tag in LocalTitleCodes]
    )
    title = models.CharField(max_length=255)

由于Django无法找到相应的值,因此它回退到存储在数据库中的值。

因为:

>>> [(tag, tag.value) for tag in LocalTitleCodes]
[(<LocalTitleCodes.title_00: 'Japanese'>, 'Japanese'), (<LocalTitleCodes.title_01: 'English'>, 'English'), (<LocalTitleCodes.title_02: 'French'>, 'French')]
>>> [(tag.name, tag.value) for tag in LocalTitleCodes]
[('title_00', 'Japanese'), ('title_01', 'English'), ('title_02', 'French')]