2016-11-30 65 views
0

我無法弄清楚如何指定ModelChoiceField的初始選擇。我有什麼遺漏,我失蹤了?指定表格的初始選擇`ModelChoiceField`

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

Django是什麼版本你使用?這種方法有什麼問題,是提出一個錯誤? –

+0

我正在使用Django 1.9。我不知道爲什麼,但它並沒有設定最初的選擇,但是,從'queryset'我得到了所有必要的選擇。所以,'queryset'按預期工作 – SaidAkh

回答

1

嘗試設置initial等於模型實例。此外,它是更好的,在類級別指定字段和更新參數__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

謝謝,我沒有意識到'initial'應該是MCQChoice的一個對象 – SaidAkh