Django表单视图和指向同一视图的操作

时间:2015-05-06 17:37:02

标签: django forms

我有两个网址分别表示A.html和B.html,其中包含a和b视图。 A有一个表格动作,指向B.html。所以A.html的动作指向b和B.html也指向b。

我有两个问题:

  1. 如果用户未选择A.html中的值并按下提交按钮,则应指向与A.html相同的网址。但是由于我的表单动作,它被导向B.html。有没有办法只向A.html保持这个方向。

  2. A.html中选择的术语传递给B.html。我需要保留这个术语,因为它在提交B.html中的另一个表单时有用。我的问题是B.html指向相同的视图,而A.html的表单操作也指向相同的视图。在发布表单B时,我需要从A.html加上从B.html中选择的术语,同时保持检查,例如,在B.html中没有选择任何内容,但仍然发布了表单。怎么做?

1 个答案:

答案 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)),
)

您可以将此向导与模型和表单集一起使用。

请告诉我这是否有帮助!