从Djang中的自定义窗体/窗体集创建模型对象

2024-05-04 20:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个简单的Django应用程序,其中我希望有一组Question对象。每个问题都有自己的可用答案列表。我想在视图上显示这些问题,并基于用户数据创建对象。你知道吗

这是我无法实现的最后一部分(基于用户数据创建对象)。以下是我所拥有的:

class BaseQuestionFormset(BaseFormSet):
    def __init__(self, question_list, *args, **kwargs):
        super(BaseQuestionFormset, self).__init__(*args, **kwargs)
        self.question_list = question_list

    def get_form_kwargs(self, index):
        kwargs = super(BaseQuestionFormset, self).get_form_kwargs(index)
        if self.question_list and index < len(self.question_list):
            kwargs['question'] = self.question_list[index]
        else:
            kwargs['question'] = None
        return kwargs

class QuestionForm(forms.Form):
    def __init__(self, question, *args, **kwargs):
        super(QuestionForm, self).__init__(*args, **kwargs)
        if question:
            choice_list = [x for x in question.get_answers_list()]
            self.fields["answers"] = forms.ChoiceField(choices=choice_list,
                                                widget=RadioSelect)

            self.fields['answers'].label = question.content

我创建的表单如下:

question_formset = formset_factory(QuestionForm, BaseQuestionFormset, extra=len(questions))
formset = question_formset(question_list=questions)

然后,当我获得用户输入时,我将按如下方式创建表单集:

question_formset = formset_factory(QuestionForm, BaseQuestionFormset, extra=3) // 3 is for debug purposes
formset = question_formset(question_list=None, data=request.POST)

剩下的是一个空表单集,没有用户输入的任何数据。如果有人能指点我做错了什么,我会很感激的。你知道吗

谢谢!你知道吗

编辑: 不使用ModelForm,因为我的QuestionForm上有特别的answers字段。ModelForm对我施加了我想要避免的约束。例如,我正在处理Question的子类,如BoolQuestion,等等,我在处理ModelForm时遇到了问题。你知道吗


Tags: 数据用户selfindexinitdefargskwargs