From 6e573828c3cc15661e101d1c56fe4d0c2ecf0dd9 Mon Sep 17 00:00:00 2001 From: Tian Jie Wong Date: Fri, 29 Mar 2024 18:41:05 +0000 Subject: [PATCH] Add fix for ManyToOneRel object has no attribute 'verbose_name' for multiple ParentalKey level nested models. --- wagtail/models/reference_index.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/wagtail/models/reference_index.py b/wagtail/models/reference_index.py index a07109b93b..de55975209 100644 --- a/wagtail/models/reference_index.py +++ b/wagtail/models/reference_index.py @@ -649,8 +649,15 @@ class ReferenceIndex(models.Model): # ManyToOneRel (reverse accessor for ParentalKey) does not have a verbose name. So get the name of the child field instead if isinstance(field, models.ManyToOneRel): - child_field = field.related_model._meta.get_field(model_path_components[2]) - return capfirst(child_field.verbose_name) + label = f"{capfirst(field.related_model._meta.verbose_name)}" + idx = 2 + child_field = field.related_model._meta.get_field(model_path_components[idx]) + while isinstance(child_field, models.ManyToOneRel): + label += f" → {capfirst(child_field.related_model._meta.verbose_name)}" + idx += 2 + child_field = child_field.related_model._meta.get_field(model_path_components[idx]) + label += f" → {capfirst(child_field.verbose_name)}" + return label elif isinstance(field, StreamField): label = f"{capfirst(field.verbose_name)}" block = field.stream_block