panels.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from django.utils.functional import cached_property
  2. from django.utils.translation import gettext as _
  3. from wagtail.admin.panels import Panel
  4. class FormSubmissionsPanel(Panel):
  5. def on_model_bound(self):
  6. if not self.heading:
  7. self.heading = _("%(model_name)s submissions") % {
  8. "model_name": self.model.get_verbose_name()
  9. }
  10. class BoundPanel(Panel.BoundPanel):
  11. template_name = "wagtailforms/panels/form_responses_panel.html"
  12. @cached_property
  13. def submissions(self):
  14. form_page_model = self.panel.model
  15. form_submissions_model = form_page_model().get_submission_class()
  16. return form_submissions_model.objects.filter(page=self.instance)
  17. @cached_property
  18. def submission_count(self):
  19. return self.submissions.count()
  20. def is_shown(self):
  21. return self.submission_count
  22. def get_context_data(self, parent_context=None):
  23. context = super().get_context_data(parent_context)
  24. context.update(
  25. {
  26. "submission_count": self.submission_count,
  27. "last_submit_time": self.submissions.order_by("submit_time")
  28. .last()
  29. .submit_time,
  30. }
  31. )
  32. return context