2016-11-30 3 views
0

Ich kann nicht herausfinden, wie die anfängliche Auswahl für ModelChoiceField festgelegt wird. Gibt es eine Einschränkung, die ich vermisse?Geben Sie die erste Auswahl für ein Formular `ModelChoiceField` an.

class QuizUserForm(forms.Form): 
    question = forms.CharField() 
    eq_answer = forms.CharField(widget=forms.Textarea) 

    def __init__(self, *args, **kwargs): 
     super(QuizUserForm, self).__init__(*args, **kwargs) 
     self.fields['mcq_answer_choice'] = forms.ModelChoiceField(queryset=models.MCQChoice.objects.filter(
     question__prompt=kwargs['initial']['question']), initial=1, widget=forms.RadioSelect, 
     empty_label=None) 
+0

Welche Version von Django spielt Du? Was ist falsch daran, einen Fehler zu melden? –

+0

Ich benutze Django 1.9. Ich weiß nicht warum, aber es stellt keine erste Wahl, aber aus dem 'queryset' erhalte ich alle notwendigen Entscheidungen. Also, 'queryset' funktioniert wie erwartet – SaidAkh

Antwort

1

Einstellung initial gleich Modellinstanz versuchen. Auch ist es besser, zu spezifizieren Feld auf Klassenebene und Update params in __init__

class QuizUserForm(forms.Form): 
    question = forms.CharField() 
    eq_answer = forms.CharField(widget=forms.Textarea) 
    mcq_answer_choice = forms.ModelChoiceField(
     queryset=models.MCQChoice.objects.none(), 
     widget=forms.RadioSelect, 
     empty_label=None 
    ) 

    def __init__(self, *args, **kwargs): 
     super(QuizUserForm, self).__init__(*args, **kwargs) 
     queryset = models.MCQChoice.objects.filter(
      question__prompt=kwargs['initial']['question'] 
     ) 
     self.fields['mcq_answer_choice'].queryset = queryset 
     self.fields['mcq_answer_choice'].initial = queryset.first() 
+0

Danke, ich habe nicht realisiert, dass' initial' ein Objekt von MCQChoice sein sollte – SaidAkh

Verwandte Themen