diff --git a/wagtail/admin/views/pages/edit.py b/wagtail/admin/views/pages/edit.py index 21bd3bb25e..1f06c93d12 100644 --- a/wagtail/admin/views/pages/edit.py +++ b/wagtail/admin/views/pages/edit.py @@ -333,6 +333,15 @@ class EditView(WagtailAdminTemplateMixin, HookResponseMixin, View): self.scheduled_revision = self.real_page_record.scheduled_revision self.page_content_type = self.real_page_record.cached_content_type self.page_class = self.real_page_record.specific_class + self.prefetch_related = self.page_class.prefetch_related + self.select_related = self.page_class.select_related + self.real_page_record = get_object_or_404( + self.page_class.objects.select_related( + *self.select_related, + ).prefetch_related( + *self.prefetch_related, + ), + ) if self.page_class is None: raise PageClassNotFoundError( diff --git a/wagtail/models/pages.py b/wagtail/models/pages.py index f5b4512e97..ee3b66b4fe 100644 --- a/wagtail/models/pages.py +++ b/wagtail/models/pages.py @@ -477,6 +477,10 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase): HTTPMethod.PUT, ] + # Allows prefetching of related objects for admin views + prefetch_related_objects = [] + select_related_objects = [] + @staticmethod def route_for_request(request: HttpRequest, path: str) -> RouteResult | None: """