我有一个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。
答案 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')]