2009-03-08 4 views
9

私はDjangoアプリを開発しています。私のモデルの一つは、「ユーザー」、以下に定義されるように、「性別」フィールドが含まれていますデフォルトでDjango ModelFormメニュー項目を選択するにはどうしたらいいですか?

GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True) 

私は「新しいユーザー」HTMLフォームを生成するのModelFormを使用しています。私のGoogle-fuが失敗しているようです - このHTMLフォームに、デフォルトでドロップダウンボックスで「男性」アイテムが選択されているようにするにはどうすればよいですか? (つまり、この項目はselected="selected"です)

答えて

15

あなたが選択したデフォルト値を持つ空白のフォームを必要とする場合は、キーとして、あなたのフィールドの名前を使用して、モデルフォームのコンストラクタに「初期」の辞書を渡す:

form = MyModelForm (initial={'gender':'M'}) 

-OR-

Forms APIの宣言的性質を使用して、ModelFormの特定の属性をオーバーライドすることができます。しかし、これはおそらくこのユースケースでは少し面倒です。私はあなたがそれを行うことができることを示すためだけに言及します。将来的にはこれに他の用途があるかもしれません。

class MyModelForm (forms.ModelForm): 
    gender = forms.ChoiceField (choices=..., initial='M', ...) 
    class Meta: 
     model=MyModel 

-OR-

あなたは、モデルの特定のインスタンスにバインドされているのModelFormをしたい場合、あなたはそれから選択された値を引くためにはDjangoの原因となるモデルの「インスタンス」を渡すことができますモデル。

form = MyModelForm (instance=someinst) 
+0

私は実際にあなたが答えたときにモデルのインスタンスを渡しても、DjangoがHTMLで選択された値を表示することはないことが分かりました。それはテキスト入力フィールドでうまく動作しますが、選択入力にも必要です。これを回避する方法は? – GChorn

+0

@GChornそれは選択フィールドでもうまくいくはずですので、何か別のものがあるかもしれません。新しい質問を作成して関連コードを投稿することをお勧めします。もっと多くの人に見てもらうことができます。 –

+0

こんにちはジョー、返信ありがとう、はい私は実際にこれを昨日しましたが、まだ答えはありません:http://stackoverflow.com/q/16056045/1256700 – GChorn

7

確かにdefaultはこのトリックを行いますか?

gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default='M', null=True)
+0

+1;それも働いた。ありがとう。 – RexE

関連する問題