Skip to content

Commit b879c4d

Browse files
committed
NPL-450 fix name grouping in COT detail view
1 parent 7a42cf8 commit b879c4d

File tree

2 files changed

+69
-49
lines changed

2 files changed

+69
-49
lines changed

netbox_custom_objects/templates/netbox_custom_objects/customobjecttype.html

Lines changed: 56 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -50,55 +50,62 @@ <h5 class="card-header">{% trans "Custom Object Type" %}</h5>
5050
<div class="card">
5151
<h2 class="card-header">Fields</h2>
5252
<table class="table table-hover attr-table">
53-
{% for field in object.fields.all %}
54-
<tr>
55-
<th scope="row">{{ field }}</th>
56-
<td>{{ field|get_field_type_verbose_name }}</td>
57-
<td>{% if field.type == "object" or field.type == "multiobject" %}{{ field|get_field_object_type }}{% endif %}</td>
58-
<td>
59-
{% if field.required %}
60-
<i
61-
class="mdi mdi-asterisk text-primary"
62-
data-bs-toggle="tooltip"
63-
data-bs-placement="right"
64-
title="Required"
65-
></i>
66-
{% endif %}
67-
</td>
68-
<td>
69-
{% if field.unique %}
70-
<i
71-
class="mdi mdi-snowflake text-primary"
72-
data-bs-toggle="tooltip"
73-
data-bs-placement="right"
74-
title="Unique"
75-
></i>
76-
{% endif %}
77-
</td>
78-
<td>
79-
{% if field.primary %}
80-
<i
81-
class="mdi mdi-text-short text-primary"
82-
data-bs-toggle="tooltip"
83-
data-bs-placement="right"
84-
title="Primary name field"
85-
></i>
86-
{% endif %}
87-
</td>
88-
<td>
89-
<span class="btn-group dropdown">
90-
<a class="btn btn-sm btn-warning" href="{% url 'plugins:netbox_custom_objects:customobjecttypefield_edit' pk=field.pk %}?return_url={{ object.get_absolute_url }}" type="button"
91-
aria-label="{attrs.title}"><i class="mdi mdi-pencil"></i></a>
92-
<a class="btn btn-sm btn-warning dropdown-toggle" type="button" data-bs-toggle="dropdown"
93-
style="padding-left: 2px">
94-
<span class="visually-hidden">{toggle_text}</span></a>
95-
<ul class="dropdown-menu">
96-
<li><a class="dropdown-item" href="{% url 'plugins:netbox_custom_objects:customobjecttypefield_delete' pk=field.pk %}?return_url={{ object.get_absolute_url }}">
97-
<i class="mdi mdi-trash-can-outline"></i> Delete</a></li>
98-
</ul>
99-
</span>
100-
</td>
101-
</tr>
53+
{% for group_name, group_fields in field_groups.items %}
54+
{% if group_name %}
55+
<tr class="table-group-header">
56+
<th scope="row" colspan="7" class="fw-bold">{{ group_name }}</th>
57+
</tr>
58+
{% endif %}
59+
{% for field in group_fields %}
60+
<tr>
61+
<th scope="row">{{ field }}</th>
62+
<td>{{ field|get_field_type_verbose_name }}</td>
63+
<td>{% if field.type == "object" or field.type == "multiobject" %}{{ field|get_field_object_type }}{% endif %}</td>
64+
<td>
65+
{% if field.required %}
66+
<i
67+
class="mdi mdi-asterisk text-primary"
68+
data-bs-toggle="tooltip"
69+
data-bs-placement="right"
70+
title="Required"
71+
></i>
72+
{% endif %}
73+
</td>
74+
<td>
75+
{% if field.unique %}
76+
<i
77+
class="mdi mdi-snowflake text-primary"
78+
data-bs-toggle="tooltip"
79+
data-bs-placement="right"
80+
title="Unique"
81+
></i>
82+
{% endif %}
83+
</td>
84+
<td>
85+
{% if field.primary %}
86+
<i
87+
class="mdi mdi-text-short text-primary"
88+
data-bs-toggle="tooltip"
89+
data-bs-placement="right"
90+
title="Primary name field"
91+
></i>
92+
{% endif %}
93+
</td>
94+
<td>
95+
<span class="btn-group dropdown">
96+
<a class="btn btn-sm btn-warning" href="{% url 'plugins:netbox_custom_objects:customobjecttypefield_edit' pk=field.pk %}?return_url={{ object.get_absolute_url }}" type="button"
97+
aria-label="{attrs.title}"><i class="mdi mdi-pencil"></i></a>
98+
<a class="btn btn-sm btn-warning dropdown-toggle" type="button" data-bs-toggle="dropdown"
99+
style="padding-left: 2px">
100+
<span class="visually-hidden">{toggle_text}</span></a>
101+
<ul class="dropdown-menu">
102+
<li><a class="dropdown-item" href="{% url 'plugins:netbox_custom_objects:customobjecttypefield_delete' pk=field.pk %}?return_url={{ object.get_absolute_url }}">
103+
<i class="mdi mdi-trash-can-outline"></i> Delete</a></li>
104+
</ul>
105+
</span>
106+
</td>
107+
</tr>
108+
{% endfor %}
102109
{% endfor %}
103110
</table>
104111
</div>

netbox_custom_objects/views.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,22 @@ def get_table(self, data, request, bulk_actions=True):
160160

161161
def get_extra_context(self, request, instance):
162162
model = instance.get_model()
163+
164+
# Get fields and group them by group_name
165+
fields = instance.fields.all().order_by("group_name", "weight", "name")
166+
167+
# Group fields by group_name
168+
field_groups = {}
169+
for field in fields:
170+
group_name = field.group_name or None # Use None for ungrouped fields
171+
if group_name not in field_groups:
172+
field_groups[group_name] = []
173+
field_groups[group_name].append(field)
174+
163175
return {
164176
"custom_objects": model.objects.all(),
165177
"table": self.get_table(self.queryset, request),
178+
"field_groups": field_groups,
166179
}
167180

168181

0 commit comments

Comments
 (0)