我是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;
我想在&#39;姓名&#39;中制作文字。字段并使第一行被选中。 如果你有像我这样的任何参考网站,也会很棒!
谢谢!
答案 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