2016-07-23 99 views
0

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

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

学校对象有'id','Name','Domain'字段,但是当我在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>

我想实现从“名称”字段中的文本,并在第一行被选中。 如果你有任何一个像我这样的参考网站,它也会很棒!

谢谢!

回答

1

它显示School object,因为这是如何呈现School对象。如果你没有在School模型中指定任何东西,那么django将呈现对象。

您需要做的是为School模型定义__str__方法。该__str__()方法被定义为:当你的 对象调用str()

__str__()方法被调用。 Django在很多地方使用str(obj)。最显着的是, 在Django管理站点中显示一个对象,并在显示对象时将其作为插入到模板中的值 。因此,您应始终使用 __str__()方法返回一个漂亮的,人类可读的模型表示。

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

Django的文档约__str__

0

如果你想在默认情况下选中的第一个对象,那么你应该这样类似的东西在你的表单模型:

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

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