Beispiel #1
0
    def save(self, commit=True):
        # save the response object
        response = super(ResponseForm, self).save(commit=False)
        response.survey = self.survey
        response.interview_uuid = self.uuid
        response.save()

        # create an answer object for each question and associate it with this
        # response.
        for field_name, field_value in self.cleaned_data.items():
            if field_name.startswith("question_"):
                # warning: this way of extracting the id is very fragile and
                # entirely dependent on the way the question_id is encoded in the
                # field name in the __init__ method of this form class.
                q_id = int(field_name.split("_")[1])
                q = Question.objects.get(pk=q_id)
                if q.question_type == Question.TEXT:
                    a = AnswerText(question=q)
                    a.answer = field_value
                elif q.question_type == Question.RADIO:
                    a = AnswerRadio(question=q)
                    a.answer = field_value
                elif q.question_type == Question.SELECT:
                    a = AnswerSelect(question=q)
                    a.answer = field_value
                elif q.question_type == Question.SELECT_MULTIPLE:
                    a = AnswerSelectMultiple(question=q)
                    a.answer = ', '.join([str(i) for i in field_value])
                elif q.question_type == Question.INTEGER:
                    a = AnswerInteger(question=q)
                    a.answer = field_value
                elif q.question_type == Question.RANGE:
                    a = AnswerText(question=q)
                    a.answer = field_value
                elif q.question_type == Question.IMAGE:
                    a = AnswerRadio(question=q)
                    a.answer = field_value
                a.response = response
                a.save()
        return response