【问题标题】:Pass form validation errors back to Wagtail Page template将表单验证错误传递回 Wagtail 页面模板
【发布时间】:2020-03-13 16:35:44
【问题描述】:

我有一个用于呈现表单的 Wagtail Page 模型。我已经覆盖了get_contextserve 方法以将表单作为页面上下文传递,然后在收到POST 请求时对其进行验证:

class RegistrationPage(Page):
    ...

    def get_context(self, request, *args, **kwargs):
        # Avoid circular dependency
        from registration.forms import RegistrationForm

        context = super().get_context(request)

        context["form"] = RegistrationForm

        return context

    def serve(self, request, *args, **kwargs):
        # Avoid circular dependency
        from registration.forms import RegistrationForm

        if request.method == "POST":
            registration_form = RegistrationForm(request.POST)

            if registration_form.is_valid():
                registration = registration_form.save()

                return redirect("/")
            else:
                # How do I pass the form with validation errors to the page?
                # Note: I already have template logic to render the form errors
                # I just need to pass the invalidated form to the template
        else:
            return super().serve(request)

问题:

当表单验证失败时,如何将表单传递回模板以便用户可以看到验证错误?

【问题讨论】:

    标签: python django django-forms django-views wagtail


    【解决方案1】:

    我找到的答案是将表单附加到 __init__ 方法内的 Page 模型,然后用 serve 方法内的无效表单覆盖表单:

    class RegistrationPage(Page):
        ...
    
        def __init__(self, *args, **kwargs):
            # Avoid circular dependency
            from registration.forms import RegistrationForm
    
            super().__init__(*args, **kwargs)
    
            self.registration_form = RegistrationForm
    
        def get_context(self, request, *args, **kwargs):
    
            context = super().get_context(request)
    
            context["form"] = self.registration_form
    
            return context
    
        def serve(self, request, *args, **kwargs):
            # Check if form was submitted
            if request.method == "POST":
                registration_form = self.registration_form(request.POST)
    
                if registration_form.is_valid():
                    registration = registration_form.save()
    
                    messages.success(request, 'Registration added successfully!')
    
                    return redirect("/")
                else:
                    self.registration_form = registration_form
    
            return super().serve(request)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2020-03-20
      • 2015-02-25
      • 2023-03-19
      相关资源
      最近更新 更多