diff --git a/wagtail/admin/tests/test_reports_views.py b/wagtail/admin/tests/test_reports_views.py
index fcdc617d50..f0f174a84d 100644
--- a/wagtail/admin/tests/test_reports_views.py
+++ b/wagtail/admin/tests/test_reports_views.py
@@ -31,6 +31,16 @@ class TestLockedPagesView(TestCase, WagtailTestUtils):
# Initially there should be no locked pages
self.assertContains(response, "No locked pages found.")
+ # No user locked anything
+ self.assertInHTML(
+ """
+
+ """,
+ response.content.decode(),
+ )
+
self.page = Page.objects.first()
self.page.locked = True
self.page.locked_by = self.user
@@ -44,6 +54,16 @@ class TestLockedPagesView(TestCase, WagtailTestUtils):
self.assertNotContains(response, "No locked pages found.")
self.assertContains(response, self.page.title)
+ self.assertInHTML(
+ f"""
+
+ """,
+ response.content.decode(),
+ )
+
def test_csv_export(self):
self.page = Page.objects.first()
diff --git a/wagtail/admin/views/reports/locked_pages.py b/wagtail/admin/views/reports/locked_pages.py
index 3ac9f174ec..40a1ea1889 100644
--- a/wagtail/admin/views/reports/locked_pages.py
+++ b/wagtail/admin/views/reports/locked_pages.py
@@ -3,6 +3,7 @@ import datetime
import django_filters
from django.conf import settings
+from django.contrib.auth import get_user_model
from django.core.exceptions import PermissionDenied
from django.utils.translation import gettext_lazy as _
@@ -12,8 +13,16 @@ from wagtail.core.models import Page, UserPagePermissionsProxy
from .base import PageReportView
+def get_users_for_filter():
+ User = get_user_model()
+ return User.objects.filter(locked_pages__isnull=False).order_by(User.USERNAME_FIELD)
+
+
class LockedPagesReportFilterSet(WagtailFilterSet):
locked_at = django_filters.DateFromToRangeFilter(widget=DateRangePickerWidget)
+ locked_by = django_filters.ModelChoiceFilter(
+ field_name="locked_by", queryset=lambda request: get_users_for_filter()
+ )
class Meta:
model = Page