我有两个网址分别表示A.html和B.html,其中包含a和b视图。 A有一个表格动作,指向B.html。所以A.html的动作指向b和B.html也指向b。
我有两个问题:
如果用户未选择A.html中的值并按下提交按钮,则应指向与A.html相同的网址。但是由于我的表单动作,它被导向B.html。有没有办法只向A.html保持这个方向。
A.html中选择的术语传递给B.html。我需要保留这个术语,因为它在提交B.html中的另一个表单时有用。我的问题是B.html指向相同的视图,而A.html的表单操作也指向相同的视图。在发布表单B时,我需要从A.html加上从B.html中选择的术语,同时保持检查,例如,在B.html中没有选择任何内容,但仍然发布了表单。怎么做?
答案 0 :(得分:2)
如果我理解正确,您正在尝试逐步进行表单验证。
为此目的,在不同步骤之间保存数据的简洁方法是使用Django的Contrib中的 WizardView : 它允许您选择在会话中或使用cookie保存表单数据,并按预期处理表单验证
受到案例中文档的启发:
forms.py 中的
from django import forms
class FormA(forms.Form):
field_1 = forms.CharField(max_length=100)
#Usual validation methods here if needed
class FormB(forms.Form):
field_1 = forms.CharField(max_length=100)
#Usual validation methods here if needed
views.py 中的
from django.shortcuts import render_to_response
from myapp.forms import FormA, FormB
from django.contrib.formtools.wizard.views import SessionWizardView
FORMS = [("form_a", FormA),
("form_b", FormB)]
TEMPLATES = {"form_a": "myapp/a.html",
"form_b": "myapp/b.html"}
class MyFormWizard(SessionWizardView):
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def done(self, form_list, **kwargs):
return render_to_response('done.html', {
'form_data': [form.cleaned_data for form in form_list],
})
在 urls.py 中
from django.conf.urls import url, patterns
from myapp.views import MyFormWizard
urlpatterns = patterns('',
(r'^myform/$', MyFormWizard.as_view(FORMS)),
)
您可以将此向导与模型和表单集一起使用。
请告诉我这是否有帮助!