From cb82810b2741e287e40e11e134da1d5c6164f659 Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Fri, 16 May 2025 11:32:51 -0500 Subject: [PATCH] Clean up new has_field_errors mechanism, fix issue with ObjectAttribute --- .../templates/form_helpers/render_fieldset.html | 4 ++-- netbox/utilities/templatetags/form_helpers.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/netbox/utilities/templates/form_helpers/render_fieldset.html b/netbox/utilities/templates/form_helpers/render_fieldset.html index 0faf23c92..a9d980f4d 100644 --- a/netbox/utilities/templates/form_helpers/render_fieldset.html +++ b/netbox/utilities/templates/form_helpers/render_fieldset.html @@ -6,7 +6,7 @@

{{ heading }}

{% endif %} - {% for layout, title, items, has_errors in rows %} + {% for layout, title, items, has_field_errors in rows %} {% if layout == 'field' %} {# Single form field #} @@ -25,7 +25,7 @@ {% elif layout == 'inline' %} {# Multiple form fields on the same line #} -
+
{% for field in items %}
diff --git a/netbox/utilities/templatetags/form_helpers.py b/netbox/utilities/templatetags/form_helpers.py index 9c90a0a37..b5f83c565 100644 --- a/netbox/utilities/templatetags/form_helpers.py +++ b/netbox/utilities/templatetags/form_helpers.py @@ -51,6 +51,8 @@ def widget_type(field): def render_fieldset(form, fieldset): """ Render a group set of fields. + + The signature for row tuples is (layout, title, items, has_field_errors). """ rows = [] @@ -75,18 +77,21 @@ def render_fieldset(form, fieldset): 'fields': [form[name] for name in tab['fields'] if name in form.fields] } for tab in item.tabs ] + has_field_errors = any( + field.errors for tab in tabs for field in tab['fields'] + ) # If none of the tabs has been marked as active, activate the first one if not any(tab['active'] for tab in tabs): tabs[0]['active'] = True rows.append( - ('tabs', None, tabs, False) + ('tabs', None, tabs, has_field_errors) ) elif type(item) is ObjectAttribute: value = getattr(form.instance, item.name) label = value._meta.verbose_name if hasattr(value, '_meta') else item.name rows.append( - ('attribute', label.title(), [value]) + ('attribute', label.title(), [value], False) ) # A single form field @@ -96,7 +101,7 @@ def render_fieldset(form, fieldset): if field.name in getattr(form, 'nullable_fields', []): field._nullable = True rows.append( - ('field', None, [field], False) + ('field', None, [field], bool(field.errors)) ) return {