【问题标题】:Get choices display value using enum as choices使用枚举作为选项获取选项显示值
【发布时间】:2018-11-03 09:17:45
【问题描述】:

我有一个 Django 模型,我在其中使用了选择参数。对于选择,我使用的是 Python Enum。现在我想在模板中显示选择显示值。我知道有.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


    【解决方案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')]
    

    【讨论】:

    • 哇,哈哈!我怎么从来没有注意到这一点? facepalm 就像一个魅力。 StackOverflow 说我还不能接受你的回答,但我会在 10 分钟内接受。非常感谢伙计! :)
    • 对于 Django3.0+,使用models.TextChoices
    【解决方案2】:
    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)
    

    或者你可以这样选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2018-12-14
      相关资源
      最近更新 更多