114

フォーム内のフィールド宣言は次のとおりです。

max_number = forms.ChoiceField(widget = forms.Select(), 
    choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)

初期値を に設定したいのですが3、うまくいかないようです。パラメータ、引用符/引用符なしなどで遊んでみましたが、変更はありません。

可能であれば、誰かが私に決定的な答えを教えてくれますか? そして/またはコードスニペットに必要な調整はありますか?

私はDjango 1.0を使用しています

4

7 に答える 7

124

フォームをインスタンス化するときに初期値を設定してみてください。

form = MyForm(initial={'max_number': '3'})
于 2009-03-20T09:04:41.510 に答える
109

これは当面の質問には触れませんが、この Q/A は、選択した値を に割り当てようとすることに関連する検索に出てきますChoiceField

Form クラスで既に呼び出している場合は、プロパティではなく辞書super().__init__を更新する必要があります。学習すると(例:への呼び出し後)、すべてのフィールドの値が含まれます。その辞書に値があると、値が上書きされます。form.initialfield.initialform.initialprint self.initialsuper().__init__Nonefield.initial

例えば

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        # assign a (computed, I assume) default value to the choice field
        self.initial['choices_field_name'] = 'default value'
        # you should NOT do this:
        self.fields['choices_field_name'].initial = 'default value'
于 2012-07-09T18:04:22.010 に答える
62

次のこともできます。あなたのフォームクラス定義で:

max_number = forms.ChoiceField(widget = forms.Select(), 
                 choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)

次に、ビューでフォームを呼び出すときに、最初の選択肢と選択肢リストの両方を動的に設定できます。

yourFormInstance = YourFormClass()

yourFormInstance.fields['max_number'].choices = [(1,1),(2,2),(3,3)]
yourFormInstance.fields['max_number'].initial = [1]

注: 初期値はリストである必要があり、選択肢は 2 タプルである必要があります。上記の例では、2 タプルのリストがあります。お役に立てれば。

于 2010-07-01T21:14:38.500 に答える
22

私もこの問題に遭遇し、問題がブラウザにあることがわかりました。ブラウザを更新すると、チェックされたフィールドを無視して、以前と同じ値でフォームが再入力されます。ソースを表示すると、チェックされた値が正しいことがわかります。または、ブラウザの URL フィールドにカーソルを置き、Enter キーを押します。これにより、フォームが最初から再ロードされます。

于 2009-12-02T15:29:45.073 に答える
7

トムとバートンの両方の答えは最終的にはうまくいきますが、ModelChoiceField.

唯一の秘訣は、選択肢が のタプルとして保存される(<model's ID>, <model's unicode repr>)ことです。したがって、最初のモデル選択を設定する場合は、オブジェクト自体やその名前などではなく、モデルのIDを初期値として渡します。次に、次のように簡単です。

form = EmployeeForm(initial={'manager': manager_employee_id})

または、initial次のように余分な行を追加して、引数を無視することもできます。

form.fields['manager'].initial = manager_employee_id
于 2011-02-27T09:45:02.433 に答える
1

確かに、フォームをどのようにレンダリングしているかを確認する必要があります。初期値はバインドされていない形式でのみ使用され、バインドされていてそのフィールドの値が含まれていない場合は、何も選択されません。

于 2009-03-18T12:06:46.167 に答える