2012-01-13 17 views
0

フォームオーバーロードでMultipleChoiceFieldのデフォルト値をロードしようとしています。Django MultipleChoiceFieldはフォームオーバーロードの初期データを更新しません

私はなMultipleChoiceField内部の初期変数を与えるのであれば、それは動作します:

class UserPreferences(forms.Form): 
    my_form = forms.MultipleChoiceField(
     widget = forms.CheckboxSelectMultiple(), 
     choices = MY_CHOICES, 
     initial = MY_INITIAL_DICT) 

しかし、私は、ユーザーに関連するデータベースからの初期値を取得し、次のように初期更新しようとした場合、my_form初期変数は、」doesnの

class UserPreferences(forms.Form): 
    my_form = forms.MultipleChoiceField(
     widget = forms.CheckboxSelectMultiple(), 
     choices = MY_CHOICES) 

    def __init__(self, user): 
     initial = make_my_dict_from(MyModel.objects.filter(user=user)) 

     super(UserPreferences, self).__init__(initial, empty_permitted) 

私はこれを単純なChoiceFieldで行いますが、MultipleChoiceFieldでは動作しません。

ありがとうございました!あなたはこのようなキーワード引数を使用する必要が

super(UserPreferences, self).__init__(initial=initial) 

答えて

0

はこれを試してみてください。 Pythonはあなたの変数名を見ず、正しいスロットを使います。

"empty_permitted"はどこから来たのですか?あなたの例は使用しますが、この変数は定義しません。

+0

申し訳ありませんが、__init__で本当の例を再現しませんでした。私はもっと多くのパラメータを持っています。確かに、initial = initualなどの残りのパラメータは、より良い、よりクリーンなプラクティスですが、それは私の問題ではありませんでした。 DjangoはMultipleChoiceFieldsと特別な動作をします。とにかく、あなたの答えをありがとう! – ScotchAndSoda

+0

私はMultipleChoiceFieldsを使用しましたが、AFAIKでは特別な動作はありません。 – guettli

関連する問題