diff --git a/wagtail/models/reference_index.py b/wagtail/models/reference_index.py index 2d4e65ba35..273eb24bbc 100644 --- a/wagtail/models/reference_index.py +++ b/wagtail/models/reference_index.py @@ -488,4 +488,10 @@ class ReferenceIndex(models.Model): child_field = field.related_model._meta.get_field(model_path_components[2]) return capfirst(child_field.verbose_name) else: - return capfirst(field.verbose_name) + try: + field_name = field.verbose_name + except AttributeError: + # generate verbose name from field name in the same way that Django does: + # https://github.com/django/django/blob/7b94847e384b1a8c05a7d4c8778958c0290bdf9a/django/db/models/fields/__init__.py#L858 + field_name = field.name.replace("_", " ") + return capfirst(field_name) diff --git a/wagtail/snippets/tests/test_snippets.py b/wagtail/snippets/tests/test_snippets.py index f9130d4599..9358cea143 100644 --- a/wagtail/snippets/tests/test_snippets.py +++ b/wagtail/snippets/tests/test_snippets.py @@ -60,6 +60,7 @@ from wagtail.test.testapp.models import ( AdvertWithTabbedInterface, DraftStateCustomPrimaryKeyModel, DraftStateModel, + GenericSnippetPage, RevisableChildModel, RevisableModel, SnippetChooserModel, @@ -3161,6 +3162,12 @@ class TestSnippetUsageView(TestCase, WagtailTestUtils): page = Page.objects.get(pk=2) page.save() + gfk_page = GenericSnippetPage( + title="Generic snippet page", + snippet_content_object=Advert.objects.get(pk=1), + ) + page.add_child(instance=gfk_page) + response = self.client.get( reverse( "wagtailsnippets_tests_advert:usage", @@ -3168,6 +3175,8 @@ class TestSnippetUsageView(TestCase, WagtailTestUtils): ) ) self.assertContains(response, "Welcome to the Wagtail test site!") + self.assertContains(response, "Generic snippet page") + self.assertContains(response, "Snippet content object") def test_usage_without_edit_permission_on_snippet(self): # Create a user with basic admin backend access