2017-05-31 9 views
0

の検証私はこの現在のフォームを持っている:ジャンゴModelChoiceField、動的なクエリセット

class PersonForm(forms.Form):                       
    article = forms.CharField(required=False) 
    workshop = forms.ModelChoiceField(queryset=Program.objects.none(), 
             empty_label="----", 
             required=False, 
             label='Atelier') 

    def __init__(self, *args, **kwargs):                      
     super(PersonForm, self).__init__(*args, **kwargs) 
     article = self.initial.get('article', None) 
     if article: 
      a = Article.objects.get(pk=article) 
      if a.workshop: 
       self.fields['workshop'].queryset = Program.objects.filter(event=a.event, workshop=True) 
       self.fields['workshop'].required = True 
       self.helper.layout.insert(4, Row1Field('workshop',)) 

すべてのワークショップを取得するために使用されるクエリセットがModelChoiceField内部クエリセットの属性がProgram.objects.none()に設定されているので、動的であり、かつ動的なクエリセットフォームの__init__メソッド内で行われます

すべて正常に動作しています:選択内のworkshopに表示される値はすべてokです。しかし、私がフォームを投稿すると、妥当性検査のエラーがあります:'Select a valid choice. This choice is not among available choices.'

何かが欠落していますか?

+0

あなたの意見を示してください。 – Alasdair

答えて

0

投稿時にフォームをインスタンス化するコードによっては、initialが渡されないことがあります。試してみることができます:

article = self.initial.get('article', None) or self.data.get('article', None) 

これはあなたのフォームのPOSTデータからpkを取得します。

関連する問題