2016-07-23 19 views
0

私はPythonとDjangoの新機能です。私は以下のようにModelChoiceFieldとコンボボックスを使用したいと思います。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>

私は、「名前」フィールドからテキストを作成し、最初の行を選択するようにしたいと思います。 また、私のようなリファレンスサイトがあれば素晴らしいかもしれません!

ありがとうございます!

答えて

1

Schoolのオブジェクトがレンダリングされるため、School objectが表示されます。 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

あなたは、デフォルトで選択された第1のオブジェクトを持つようにしたい場合は、あなた必要がありますので、フォームのモデルでそのようなこと:あなたができるモデルのインスタンスから初期値を設定したい場合は

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

ここで受諾された回答を確認してくださいSO accepted answer

関連する問題