2012-02-28 8 views
3

MultipleChoiceField()に初期値を正しくロードするにはどうすればよいですか?MultipleChoiceFieldがDjango Adminに格納された値を表示しない

私はCharFieldを持つDjangoモデルを持っています。これは、その値を1つ以上の特定の選択肢に制限したいので、MultipleChoiceField()としてadminでレンダリングしています。

class MyModelInlineForm(ModelForm): 

    my_text_field = forms.MultipleChoiceField(required=False) 

    def __init__(self, *args, **kwargs): 
     super(MyModelInlineForm, self).__init__(*args, **kwargs) 

     self.fields['my_text_field'].choices = get_choices(self.instance) 

     if self.instance: 
      self.fields['my_text_field'].initial = self.instance.my_text_field 

class MyModelInline(admin.TabularInline): 
    model = MyModel 
    form = MyModelInlineForm 
    extra = 0 

罰金レンダリングするようだが、私は値を選択し、選択されていない値で、新しいフォームの負荷を保存するとき:

私のコードは次のように見えます。私は値がデータベースに正しく保存されていることを確認しましたが、フォームにはロードされていません。理由はわかりません。

similarquestionsに基づいて、私のモデルの保存フィールドの値をinitialに明示的に設定しようとしましたが、これは効果がないようです。

私は間違っていますか?

答えて

4

あなたは、フィールドの、フォームのinitial(辞書)に値を設定する必要はありません。

if self.instance: 
    self.initial['my_text_field'] = self.instance.my_text_field 
+0

私も救うために優しいものに選択された値の私のリストを変換するためのカスタムclean_ *メソッドを追加する必要がありましたデータベースのテキストフィールドに入力します。デフォルトでは、Djangoは単にリストの文字列表現を保存しますが、後で最初の辞書では使用できません。 – Cerin

関連する問題