Wagtail Contact Page
From Recipes - Overriding the serve() Method
Note
I updated the code to return a TemplateResponse
because the type
checking wasn’t happy with the original code.
from django.db import transaction
from django.template.response import TemplateResponse
from enquiry.forms import EnquiryForm
from enquiry.models import Enquiry
from gdpr.models import Consent
class ContactPage(Page):
def _consent(self):
return Consent.objects.get_consent(Enquiry.GDPR_CONTACT_SLUG)
def serve(self, request):
context = super().get_context(request)
kwargs = dict(consent=self._consent(), request=request)
if request.method == "POST":
form = EnquiryForm(request.POST, **kwargs)
if form.is_valid():
with transaction.atomic():
enquiry = form.save()
transaction.on_commit(lambda: process_mail.send())
context.update({"enquiry": enquiry, "page": self})
return TemplateResponse(request, self.template, context)
else:
form = EnquiryForm(**kwargs)
context.update({"enquiry": None, "form": form, "page": self})
return TemplateResponse(request, self.template, context)