2016-05-15 2 views
1

は、私は次のモデル事前移入なMultipleChoiceFieldジャンゴ

class Application(models.Model): 
    occupation = models.TextField() 

を持っていると言うと、私は(管理者を経由して例えば)インスタンスでそれを使用する場合の選択肢が選択されていない

class ApplicationForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs) 
     super().__init__(*args, **kwargs) 
     self.fields['occupation'] = forms.MultipleChoiceField(choices=OCCUPATION_CHOICES, widget=CheckboxSelectMultiple) 

    class Meta: 
     model = Application 

を形成することができます。

私は間違っていますか?

編集:明確化:私はいくつかの選択肢を選択した場合、私はそれがデータを保存し提出するヒット。彼らはデータベースの['undergraduate', 'postdoc']のように見えます。しかし、彼らはもはやフォームでチェックされていません。

+0

あなたの 'super'呼び出しが間違っています。' super(ApplicationForm、self).__ init __(* args、** kwargs) ' – RodrigoDela

+0

いいえ、python3ではそう書ける必要はありません。 https://docs.python.org/3/library/functions.html#super – Zoli

+0

あなたの 'Application'モデルの' occupation'フィールドに 'choices = OCCUPATION_CHOICES'を追加するのを忘れました。 – RodrigoDela

答えて

2

私はそれをこのように機能させることができました。

import ast 
class ApplicationForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     if kwargs.get('instance'): 
      kwargs['initial'] = { 
       'occupation': ast.literal_eval(kwargs.get('instance').occupation or '[]'), 
      } 
     super().__init__(*args, **kwargs) 

    class Meta: 
     model = Application 
     widgets = { 
      'occupation': CheckboxSelectMultiple(choices=OCCUPATION_CHOICES), 
     } 

おかげで私は私が間違って何をしていたか実感しましたし、正しい方向に私を指摘RodrigoDelaに行きます。

1

編集:TextFieldストア複数の選択肢はできません。これを見てください: Django Model MultipleChoice

これを使用するか、またはこれらは彼らのform.occupationフィールドにinstance.occupationコンテンツを解析することができるようにあなたは、あなたのフォームを上書きするのどちらか。

+0

有効な選択肢を選択してください。 ['postdoc'、 'professor']は利用可能な選択肢の1つではありません。 (もう一度) – Zoli

+0

そのエラーは管理者に表示されますか?コードは私のために働くからです。あなたは 'makemigrations'をして移行しましたか? – RodrigoDela

+0

はい、管理者にあり、私は移行を行いました。 – Zoli

関連する問題