【问题标题】:django form wizard, ValidationError: ['ManagementForm data is missing or has been tampered.']django 表单向导,ValidationError: ['ManagementForm 数据丢失或已被篡改。']
【发布时间】:2016-09-16 11:33:07
【问题描述】:

我正在使用 django 向导进行多表单注册,最终将是 4 或 5 页表单。但是,我收到了可能与表单操作有关的验证错误,我不确定如何解决。

错误似乎源于此处的第 282 行:https://github.com/django/django-formtools/blob/master/formtools/wizard/views.py 但我不清楚是什么原因造成的?

(注意我使用的是 django 脆皮表格,但可能不相关)

views.py

class SignupWizard(SessionWizardView):
    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def done(self, form_list, **kwargs):
        for form in form_list:
            if isinstance(form, SignupForm):
                user = form.save(self.request)
                complete_signup(self.request, user, settings.ACCOUNT_EMAIL_VERIFICATION, settings.LOGIN_REDIRECT_URL)
            else:
                other_signup_form = form.save(commit=False)
                user = self.request.user
                other_signup_form.user = user
                other_signup_form.save()
        return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)


signup_view = SignupWizard.as_view(SIGNUP_FORMS)

forms.py

class SignupForm(allauthforms.SignupForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.label_class = 'sr-only'
        self.helper.layout = Layout(
            Field('name', placeholder='Your Name'),
            PrependedText('email', '<i class="fa fa-envelope-o"></i>', placeholder="Your Email",
                          autofocus=""),
            PrependedText('password1', '<i class="fa fa-key"></i>', placeholder="Enter Password"),
            Submit('sign_up', 'Sign up', css_class="btn btn-block btn-cta-primary"),
            )

class SignupForm2(forms.Form):
    first_name = forms.CharField(max_length=30)
    last_name = forms.CharField(max_length=30)

模板:

{% block inner %}
    <h2 class="title text-center">Sign up now</h2>
    <p class="intro text-center">It only takes 2 minutes.</p>
    <div class="row">
          {% crispy form %}        
    </div>
{% endblock %}

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    表单向导要求您在模板的表单标签中包含管理表单:

    {{ wizard.management_form }}
    

    请参阅the docs 了解更多信息。

    【讨论】:

    • 感谢 Alasdair,效果很好,我没有意识到模板中还需要更多,感谢您的链接。
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2014-10-09
    • 2022-08-23
    相关资源
    最近更新 更多