You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django ModelChoiceField如何在模板显示选中文本而非值?

Django表单提交后显示选中项文本而非ID的解决方案

问题原因

表单验证通过后,TarFormField1.cleaned_data['failure_name']获取到的是FailureCodeModel的实例对象,但模板中使用{{ failure_name.value }}调用的是表单字段提交的原始值(即模型的主键ID),因此显示数字而非文本。

解决方法

方法1:传递模型实例到模板并直接调用属性(推荐)

  1. 修改视图代码:将验证后的模型实例传入模板上下文
if request.method == 'POST':
    TarFormField1 = FailureCodeForm(request.POST)
    if TarFormField1.is_valid():
        # 获取选中的模型实例
        failure_instance = TarFormField1.cleaned_data['failure_name']
        # 将实例和表单传入模板上下文
        return render(request, '你的模板路径.html', {
            'TarFormField1': TarFormField1,
            'failure_instance': failure_instance
        })
  1. 修改模板代码:直接调用实例的文本字段或__str__返回值
    如果你的FailureCodeModel模型已定义__str__方法返回failure_name:
# models.py
class FailureCodeModel(models.Model):
    failure_name = models.CharField(max_length=100)
    # 其他字段...

    def __str__(self):
        return self.failure_name

模板中可直接使用实例:

{{ TarFormField1.failure_name.label_tag }} : {{ failure_instance }}

如果未定义__str__,则直接调用字段名:

{{ TarFormField1.failure_name.label_tag }} : {{ failure_instance.failure_name }}

方法2:直接从表单字段获取选中实例(无需修改视图上下文)

若不想调整视图,可通过表单的cleaned_data在模板中取值(需确保表单已验证通过):

{{ TarFormField1.failure_name.label_tag }} : {{ TarFormField1.cleaned_data.failure_name.failure_name }}

或如果模型有__str__方法:

{{ TarFormField1.failure_name.label_tag }} : {{ TarFormField1.cleaned_data.failure_name }}

内容的提问来源于stack exchange,提问作者Kaison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:27:05