[Answer]-Django complex formset issue

1👍

Simple answer: only use on single AnswerForm and let it manage which kind of field and widget it should use, ie:

class AnswerForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(AnswerForm, self).__init__(*args, **kwargs)
        instance = self.instance
        if instance.question.question_type == 'MCQ':
             self.fields["statement"] = forms.ChoiceField(
                 choices=instance.get_choices(),
                 widget=forms.RadioSelect(attrs={'class': 'allradio',})
                 )
        else:
             self.fields["statement"] = forms.CharField(
                widget=forms.Textarea()
                )
        self.fields['statement'].label = instance.get_label()

    class Meta:
        model = Answer
        exclude=('question','person','course','teacher','questionaire')

As a side note, you can pass model’s attributes values to the model’s constructor:

    answer = Answer(
        question=Question.objects.get(id=request.session['question']),
        person=student,
        course=course,
        questionnaire=questionnaire,
        # User.objects.get(id=request.user.pk) will return request.user
        # so it's just useless - just use request.user
        tathya_user=request.user
        )

Leave a comment