📜  django ModelChoiceField 值不是 id - Python (1)

📅  最后修改于: 2023-12-03 14:40:46.377000             🧑  作者: Mango

Django ModelChoiceField 值不是 id

在 Django 中,ModelChoiceField 是一种常用的表单字段,用于在表单中选择一个模型对象作为选项。通常情况下,选择的值是模型对象的主键 id。但是,有时候我们希望选择的值不是 id,而是模型对象的其他属性,比如名称或者编码。

本文将介绍如何在 Django 表单中使用 ModelChoiceField 选择模型对象的其他属性作为值。

如何选择模型对象的其他属性作为值

默认情况下,ModelChoiceField 以模型对象的 id 作为值,如下所示:

class MyForm(forms.Form):
    my_model = forms.ModelChoiceField(queryset=MyModel.objects.all())

如果我们希望选择模型对象的其他属性作为值,需要自定义 to_field_name 属性,如下所示:

class MyForm(forms.Form):
    my_model = forms.ModelChoiceField(queryset=MyModel.objects.all(), to_field_name='name')

这里以模型对象的 name 属性作为值。当我们提交表单的时候,表单将以模型对象的 name 属性作为值进行处理。

如何在模板中渲染表单

在模板中,我们可以使用 {{ form.my_model }} 渲染表单字段,如下所示:

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Save</button>
</form>

渲染出来的表单字段将显示模型对象的名称,而不是 id

总结

本文介绍了如何在 Django 表单中使用 ModelChoiceField 选择模型对象的其他属性作为值。通过自定义 to_field_name 属性,我们可以轻松地实现这一功能。希望本文对大家有所帮助!