Skip to main content
 首页 » 编程设计

python之Django之一个 View 中相同表单类的多个实例

2024年08月15日37telwanggs

在 Django Forms 的上下文中,我看到许多关于在同一页面上处理不同类型的 form 的讨论(例如 AForm 和 BForm 在同一页面上),但我试图弄清楚如何处理页面上同一 form 类的多个实例。

我可以很好地显示表单,但是当表单被 POST 编辑时,我不知道如何处理它们。

我也尝试过使用 Formset,但遇到了同样的问题(可以显示,但不知道如何处理 POST)。

所以这是我的问题:假设我在页面上显示相同 Form 类的多个实例。提交这些表单后,我将如何处理 POST 数据?

编辑:

formset 的问题是我有一个自定义表单,并且发现很难使用 formset 来处理 POST 数据。

编辑 2 - 根据@neverwalkaloner 的回复提供更多详细信息。

这是我的表单类:

class QuestionForm(forms.Form): 
def __init__(self, question, data=None, *args, **kwargs): 
    super(QuestionForm, self).__init__(*args, **kwargs) 
    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 

我正在创建带有前缀的不同表单,如下所示:form = QuestionForm(question=question, prefix=prefix)

然后,像这样处理 POST 数据:form = QuestionForm(data=request.POST, question=question, prefix=prefix)

但是,表单不绑定(bind)上述方法:(

请您参考如下方法:

您可以使用 prefix在您的 View 中初始化多个表单的参数:

mother = PersonForm(request.POST, prefix="mother") 
father = PersonForm(request.POST, prefix="father") 
 
return render(request, 'some_template.html', { 
    'mother': mother, 
    'father': father, 
})