2009-08-26 7 views

答えて

71

デフォルトの初期値を設定する場合はinitialset it to the id instead以外の他のフォームフィールドと同じように定義する必要があります。

は、あなたがこのようなfield1を持って言う:

class YourForm(forms.Form): 
    field1 = forms.ModelChoiceField(queryset = MyModel.objects.all()) 

あなたは、このようなフォーム作成する際には、初期設定する必要があります。

form = YourForm(initial = {'field1': instance_of_mymodel.pk }) 

いうより:

form = YourForm(initial = {'field1': instance_of_mymodel }) 

あなたのモデルに__unicode__を定義したと仮定しているので、このdisp正しく寝る。

+0

この執筆時点でのバージョンはわかりませんが、この質問は時代遅れです。 Django 1.5では、執筆時点で、これらの方法の両方が動作します。 – JcKelley

+0

私は '__init __()に予期しないキーワード引数field1が見つかりました。 ' – dashesy

14

あなたはそれがより一般的な方法は、他の答えだなどを選択した最初の値を作るために

field1 = forms.ModelChoiceField(queryset=..., initial=0) 

を使用することができます。彼らは変更されている

+2

Djangoのどのバージョンがこれに対応していますか?バージョン1.8では私にとってはうまくいかないようです。 – BudgieInWA

+0

[ソースコード](https://github.com/django/django/blob/1.8.11/django/forms/models.py#L1127-L1130)から確認して、これが機能していることを自分自身でテストします'django> = 1.8'のために。 '> = 1.4'を含むすべてのバージョンでこれがうまくいくはずです。 – Yeo

6

回:

は、デフォルトの初期値は、今、あなたの代わりに IDに設定除いて、他のフォームフィールドのようなinitialを定義することによって設定することができます。

さて、これで十分です:

form = YourForm(initial = {'field1': instance_of_mymodel }) 

両方がまだ動作しますが。

+6

"時間が変わった "ようになったので、実行しているDjangoのバージョンを指定してください。いくつかの変更は1.2にアップグレードされる可能性があります... – scoopseven

-1

あなたにもこれを行うことができます:

form = YourForm(initial = {'field1': pk }) 

を使用すると、インスタンスは必要ありませんクエリ文字列を介して、またはAJAX呼び出しを介して、あなたの主キーを解析している場合、クエリセットは、あなたのドロップのためのことをすでに扱っていますダウン、PKインデックスは状態あなたは

1

コードたい

form = YourForm(initial = {'field1': instance_of_mymodel.pk }) 

直接次
form = YourForm(initial = {'field1': instance_of_mymodel }) 

または初期フィールド:

field1 = forms.ModelChoiceField(queryset=..., initial=0) 

すべての作業。

最初の2つの方法は最終的な方法よりも優先されます。