如何在Django模板中显示models.TextChoices的label?
Django模板中获取枚举类型标签的解决方法
根据Django官方文档,枚举类型可通过.label获取标签,但直接在模板中调用object.model_choice.label无效。以下是具体解决办法:
场景代码示例
class Model(models.Model): class ModelChoices(models.TextChoices): ENUM = 'VALUE', 'Label' model_choice = models.CharField(choices=ModelChoices.choices)
在模板中,{{ object.model_choice }}会显示值'VALUE',而{{ object.model_choice.label }}无任何输出。
可行解决方案
方法1:使用Django内置方法(推荐)
Django会为带choices参数的字段自动生成get_字段名_display方法,直接在模板中调用即可获取标签:
{{ object.get_model_choice_display }}
这里的model_choice对应你模型中定义的字段名,调用后会返回对应的'Label'文本。
方法2:在模型中新增属性
如果偏好使用枚举类的.label属性,可以在模型中定义一个只读属性:
class Model(models.Model): class ModelChoices(models.TextChoices): ENUM = 'VALUE', 'Label' model_choice = models.CharField(choices=ModelChoices.choices) @property def model_choice_label(self): return self.ModelChoices(self.model_choice).label
之后在模板中调用该属性:
{{ object.model_choice_label }}
内容的提问来源于stack exchange,提问作者Hills
相关产品推荐
相关产品推荐

