你可以在django中使用Form Wizard for Model Forms吗?
·
问题:你可以在django中使用Form Wizard for Model Forms吗?
我有一个模型,我使用ModelForm从模型中创建了一个表格。现在,我想将表单分布在两个页面上。例如,前三个字段将出现在第一页上,然后用户单击下一步,最后三个字段将出现在第二页上。然后他点击提交,用户提交的数据被添加到数据库中。
我查看了表单向导的文档,它似乎也适用于模型表单?有人可以证实这一点吗?
如果是这样,有人可以解释创建WizardView类的过程。
这个例子在文档中给出,我不明白后两个参数是什么。 form_list 只是您根据表单类实例化的表单对象列表吗?什么是**kwargs?
class ContactWizard(SessionWizardView):
def done(self, form_list, **kwargs):
do_something_with_the_form_data(form_list)
return HttpResponseRedirect('/page-to-redirect-to-when-done/')
在此先感谢您的帮助!
解答
表单向导被内置到 Django 1.4 中,所以这是一个很好的方法。它应该做你想做的事,但你可能需要一些调整。
现在不要担心done()中的kwargs- 你不会需要它们。
form_list是您要用于步骤的表单列表 - 来自urls.py
urlpatterns = patterns('',
(r'^contact/$', ContactWizard.as_view([ContactForm1, ContactForm2])),
)
[ContactForm1, ContactForm2]将作为form_list传递给done()。
您需要做的是将您的ModelForm分解为单独的表格。最简单的方法(如果您希望您的模型在多个表单上)是不使用ModelForm而只是创建自己的表单。这很容易:
from django import forms
class ContactForm1(forms.Form):
subject = forms.CharField(max_length=100)
sender = forms.EmailField()
class ContactForm2(forms.Form):
message = forms.CharField(widget=forms.Textarea)
一旦您的表单反映了模型的各个部分,只需按照文档中的描述创建views和patterns,并将do_something_with_the_form_data(form_list)设置为从表单数据完成模型然后进行保存的函数。
您可以使用ModelForm但 - 只有当您可以说服它为表单向导生成不同的表单以用于每个步骤时 - 这将是棘手的部分。
更多推荐

所有评论(0)