Django ModelChoiceField

时间:2016-07-23 22:36:34

标签: django

我是Python和Django的新手。我想像下面一样使用ModelChoiceField的组合框。

school = forms.ModelChoiceField(queryset=School.objects.all()) 

学校对象有一个' id','域名'域名'字段但是当我在html中渲染表单时,它显示如下。



<label for="id_school">School:</label> 
<select id="id_school" name="school">
<option value="" selected="selected">---------</option>
<option value="3">School object</option>
</select>
&#13;
&#13;
&#13;

我想在&#39;姓名&#39;中制作文字。字段并使第一行被选中。 如果你有像我这样的任何参考网站,也会很棒!

谢谢!

2 个答案:

答案 0 :(得分:1)

它显示School object因为School对象的呈现方式。如果你没有在School模型中指定任何内容,那么django将如何渲染对象。

您需要做的是为__str__模型定义School方法。 __str__()方法定义为:

  

只要您呼叫__str__(),就会调用str()方法   宾语。 Django在许多地方使用str(obj)。最值得注意的是,到   在Django管理站点中显示一个对象并插入值   在显示对象时进入模板。因此,你应该永远   从中返回一个漂亮的,人类可读的模型表示   __str__()方法。

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

关于__str__的Django doc。

答案 1 :(得分:0)

如果您希望默认选择第一个对象,那么您应该在表单模型中使用类似的对象:

school = forms.ModelChoiceField(queryset=School.objects.all(), initial=0) 

如果您想从模型实例设置初始值,可以在此处查看已接受的答案SO accepted answer