2017-05-31 3 views
0

ich diese aktuelle Form haben:Django ModelChoiceField, Validierung für dynamische queryset

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',)) 

Die queryset verwendet, um alle Workshops abzurufen ist dynamisch, so dass die queryset Attribut innerhalb des ModelChoiceField zu Program.objects.none() gesetzt ist, und die dynamische queryset erfolgt innerhalb der __init__ Methode

Alles funktioniert gut: alle Werte für workshop innerhalb der Auswahl sind in Ordnung. Aber wenn ich das Formular poste, gibt es einen Validierungsfehler: 'Select a valid choice. This choice is not among available choices.'

Gibt es etwas, das ich vermisse?

+0

Bitte zeigen Sie Ihre Ansicht. – Alasdair

Antwort

0

Je nach dem Code, der das Formular nach der Instanziierung instanziiert, kann initial nicht übergeben werden. Sie könnten versuchen:

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

Dies wird die PK aus Ihrem Formular POST-Daten erhalten.

Verwandte Themen