-{% endblock %}
diff --git a/netbox/templates/htmx/form.html b/netbox/templates/htmx/form.html
index 3aafc2a21..0bfcb00ca 100644
--- a/netbox/templates/htmx/form.html
+++ b/netbox/templates/htmx/form.html
@@ -9,21 +9,8 @@
{% endfor %}
{# Render grouped fields according to Form #}
- {% for group, fields in form.fieldsets %}
-
- {% if group %}
-
-
{{ group }}
-
- {% endif %}
- {% for name in fields %}
- {% with field=form|getfield:name %}
- {% if field and not field.field.widget.is_hidden %}
- {% render_field field %}
- {% endif %}
- {% endwith %}
- {% endfor %}
-
+ {% endif %}
+ {% for layout, title, items in rows %}
+ {% if layout == 'field' %}
+ {# Single form field #}
+ {% render_field items.0 %}
+ {% elif layout == 'inline' %}
+ {# Multiple form fields on the same line #}
+
+
+ {% for field in items %}
+
+ {{ field }}
+
{% trans field.label %}
+
+ {% endfor %}
+
+ {% endif %}
+ {% endfor %}
+
diff --git a/netbox/utilities/templatetags/form_helpers.py b/netbox/utilities/templatetags/form_helpers.py
index f4fd8b819..3f60627b4 100644
--- a/netbox/utilities/templatetags/form_helpers.py
+++ b/netbox/utilities/templatetags/form_helpers.py
@@ -1,5 +1,7 @@
from django import template
+from utilities.forms.rendering import InlineFields
+
__all__ = (
'getfield',
'render_custom_fields',
@@ -45,6 +47,28 @@ def widget_type(field):
# Inclusion tags
#
+@register.inclusion_tag('form_helpers/render_fieldset.html')
+def render_fieldset(form, fieldset, heading=None):
+ """
+ Render a group set of fields.
+ """
+ rows = []
+ for item in fieldset:
+ if type(item) is InlineFields:
+ rows.append(
+ ('inline', item.label, [form[name] for name in item.field_names])
+ )
+ else:
+ rows.append(
+ ('field', None, [form[item]])
+ )
+
+ return {
+ 'heading': heading,
+ 'rows': rows,
+ }
+
+
@register.inclusion_tag('form_helpers/render_field.html')
def render_field(field, bulk_nullable=False, label=None):
"""