Передайте ошибки проверки формы обратно в шаблон страницы Wagtail - PullRequest
0 голосов
/ 13 марта 2020

У меня есть модель Wagtail Page, которую я использую для визуализации формы. Я переопределил методы get_context и serve, чтобы передать их в форме контекста страницы, а затем проверить их при получении запроса 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)

Вопрос:

Когда проверка формы завершается неудачно, как передать форму обратно в шаблон, чтобы пользователь мог видеть ошибки проверки?

1 Ответ

0 голосов
/ 13 марта 2020

Ответ, который я нашел, состоял в том, чтобы прикрепить форму к модели страницы внутри метода __init__, а затем переопределить форму недействительной формой внутри метода 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...