首页 > 解决方案 > 如何将 id 存储在数据库中,但在 Django 的 modelchoicefield 中显示名称?

问题描述

这是我在 forms.py 中的代码

manager_idd=forms.ModelChoiceField(label="Manager",widget=forms.Select(attrs={"class":"form- 
control"}),queryset=Manager.objects.all().values_list('id','name',named=True)

我正在尝试在选择字段中显示名称,但想要获取所选名称的 id,因为这是数据库中的外键。我想将其保存为数据库中的 id,但在选择字段中显示为名称。我怎样才能做到这一点?

标签: djangodjango-modelsdjango-formsdjango-viewsdjango-templates

解决方案


manager_idd=forms.ModelChoiceField(label="Manager",widget=forms.Select(attrs={"class":"form- 
control"}), queryset=Manager.objects.all().values_list('id','name',named=True))

在您的 中定义__str__()要返回的方法,因此它将用作选择选项中的表示。self.nameManager

class Manager(models.Model):
    ....
    def __str__(self):
       return self.name

# would yield
<select id="id_field1" name="field1">
<option value="obj1.pk">obj.name</option>
<option value="obj2.pk">obj.name</option>
...
</select>

__str__()将调用模型的方法来生成对象的字符串表示形式,以供在字段的选择[ Doc]中使用。


推荐阅读