mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-23 04:22:01 -06:00
Clean up new has_field_errors mechanism, fix issue with ObjectAttribute
This commit is contained in:
parent
a3adb6de48
commit
cb82810b27
@ -6,7 +6,7 @@
|
|||||||
<h2 class="col-9 offset-3">{{ heading }}</h2>
|
<h2 class="col-9 offset-3">{{ heading }}</h2>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for layout, title, items, has_errors in rows %}
|
{% for layout, title, items, has_field_errors in rows %}
|
||||||
|
|
||||||
{% if layout == 'field' %}
|
{% if layout == 'field' %}
|
||||||
{# Single form field #}
|
{# Single form field #}
|
||||||
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
{% elif layout == 'inline' %}
|
{% elif layout == 'inline' %}
|
||||||
{# Multiple form fields on the same line #}
|
{# Multiple form fields on the same line #}
|
||||||
<div class="row mb-3 {% if has_errors %} has-errors{% endif %}">
|
<div class="row mb-3 {% if has_field_errors %} has-errors{% endif %}">
|
||||||
<label class="col col-3 col-form-label text-lg-end">{{ title|default:'' }}</label>
|
<label class="col col-3 col-form-label text-lg-end">{{ title|default:'' }}</label>
|
||||||
{% for field in items %}
|
{% for field in items %}
|
||||||
<div class="col mb-1 {% if field.errors %} has-errors{% endif %}">
|
<div class="col mb-1 {% if field.errors %} has-errors{% endif %}">
|
||||||
|
@ -51,6 +51,8 @@ def widget_type(field):
|
|||||||
def render_fieldset(form, fieldset):
|
def render_fieldset(form, fieldset):
|
||||||
"""
|
"""
|
||||||
Render a group set of fields.
|
Render a group set of fields.
|
||||||
|
|
||||||
|
The signature for row tuples is (layout, title, items, has_field_errors).
|
||||||
"""
|
"""
|
||||||
rows = []
|
rows = []
|
||||||
|
|
||||||
@ -75,18 +77,21 @@ def render_fieldset(form, fieldset):
|
|||||||
'fields': [form[name] for name in tab['fields'] if name in form.fields]
|
'fields': [form[name] for name in tab['fields'] if name in form.fields]
|
||||||
} for tab in item.tabs
|
} 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 none of the tabs has been marked as active, activate the first one
|
||||||
if not any(tab['active'] for tab in tabs):
|
if not any(tab['active'] for tab in tabs):
|
||||||
tabs[0]['active'] = True
|
tabs[0]['active'] = True
|
||||||
rows.append(
|
rows.append(
|
||||||
('tabs', None, tabs, False)
|
('tabs', None, tabs, has_field_errors)
|
||||||
)
|
)
|
||||||
|
|
||||||
elif type(item) is ObjectAttribute:
|
elif type(item) is ObjectAttribute:
|
||||||
value = getattr(form.instance, item.name)
|
value = getattr(form.instance, item.name)
|
||||||
label = value._meta.verbose_name if hasattr(value, '_meta') else item.name
|
label = value._meta.verbose_name if hasattr(value, '_meta') else item.name
|
||||||
rows.append(
|
rows.append(
|
||||||
('attribute', label.title(), [value])
|
('attribute', label.title(), [value], False)
|
||||||
)
|
)
|
||||||
|
|
||||||
# A single form field
|
# A single form field
|
||||||
@ -96,7 +101,7 @@ def render_fieldset(form, fieldset):
|
|||||||
if field.name in getattr(form, 'nullable_fields', []):
|
if field.name in getattr(form, 'nullable_fields', []):
|
||||||
field._nullable = True
|
field._nullable = True
|
||||||
rows.append(
|
rows.append(
|
||||||
('field', None, [field], False)
|
('field', None, [field], bool(field.errors))
|
||||||
)
|
)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
Loading…
Reference in New Issue
Block a user