Skip to content

Commit 2669068

Browse files
committed
#11517: Standardize display of contact assignments
1 parent 157bf89 commit 2669068

File tree

4 files changed

+11
-43
lines changed

4 files changed

+11
-43
lines changed

docs/release-notes/version-3.5.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Enhancements
66

7+
* [#11517](https://github.com/netbox-community/netbox/issues/11517) - Standardize the inclusion of related objects across the entire UI
78
* [#11584](https://github.com/netbox-community/netbox/issues/11584) - Add a list view for contact assignments
89
* [#11254](https://github.com/netbox-community/netbox/issues/11254) - Introduce the `X-Request-ID` HTTP header to annotate the unique ID of each request for change logging
910
* [#11440](https://github.com/netbox-community/netbox/issues/11440) - Add an `enabled` field for device type interfaces

netbox/templates/tenancy/contact.html

+6-10
Original file line numberDiff line numberDiff line change
@@ -67,30 +67,26 @@ <h5 class="card-header">Contact</h5>
6767
<th scope="row">Description</th>
6868
<td>{{ object.description|placeholder }}</td>
6969
</tr>
70-
<tr>
71-
<th scope="row">Assignments</th>
72-
<td>{{ assignment_count }}</td>
73-
</tr>
7470
</table>
7571
</div>
7672
</div>
77-
{% include 'inc/panels/comments.html' %}
73+
{% include 'inc/panels/tags.html' %}
7874
{% plugin_left_page object %}
7975
</div>
8076
<div class="col col-md-5">
77+
{% include 'inc/panels/comments.html' %}
8178
{% include 'inc/panels/custom_fields.html' %}
82-
{% include 'inc/panels/tags.html' %}
8379
{% plugin_right_page object %}
8480
</div>
8581
</div>
8682
<div class="row mb-3">
8783
<div class="col col-md-12">
8884
<div class="card">
8985
<h5 class="card-header">Assignments</h5>
90-
<div class="card-body table-responsive">
91-
{% render_table assignments_table 'inc/table.html' %}
92-
{% include 'inc/paginator.html' with paginator=assignments_table.paginator page=assignments_table.page %}
93-
</div>
86+
<div class="card-body htmx-container table-responsive"
87+
hx-get="{% url 'tenancy:contactassignment_list' %}?contact_id={{ object.pk }}"
88+
hx-trigger="load"
89+
></div>
9490
</div>
9591
{% plugin_full_width_page object %}
9692
</div>

netbox/templates/tenancy/contactrole.html

+1-13
Original file line numberDiff line numberDiff line change
@@ -22,32 +22,20 @@ <h5 class="card-header">Contact Role</h5>
2222
<th scope="row">Description</th>
2323
<td>{{ object.description|placeholder }}</td>
2424
</tr>
25-
<tr>
26-
<th scope="row">Assignments</th>
27-
<td>
28-
{{ assignment_count }}
29-
</td>
30-
</tr>
3125
</table>
3226
</div>
3327
</div>
3428
{% include 'inc/panels/tags.html' %}
3529
{% plugin_left_page object %}
3630
</div>
3731
<div class="col col-md-6">
32+
{% include 'inc/panels/related_objects.html' %}
3833
{% include 'inc/panels/custom_fields.html' %}
3934
{% plugin_right_page object %}
4035
</div>
4136
</div>
4237
<div class="row mb-3">
4338
<div class="col col-md-12">
44-
<div class="card">
45-
<h5 class="card-header">Assigned Contacts</h5>
46-
<div class="card-body table-responsive">
47-
{% render_table contacts_table 'inc/table.html' %}
48-
{% include 'inc/paginator.html' with paginator=contacts_table.paginator page=contacts_table.page %}
49-
</div>
50-
</div>
5139
{% plugin_full_width_page object %}
5240
</div>
5341
</div>

netbox/tenancy/views.py

+3-20
Original file line numberDiff line numberDiff line change
@@ -255,16 +255,12 @@ class ContactRoleView(generic.ObjectView):
255255
queryset = ContactRole.objects.all()
256256

257257
def get_extra_context(self, request, instance):
258-
contact_assignments = ContactAssignment.objects.restrict(request.user, 'view').filter(
259-
role=instance
258+
related_models = (
259+
(ContactAssignment.objects.restrict(request.user, 'view').filter(role=instance), 'role_id'),
260260
)
261-
contacts_table = tables.ContactAssignmentTable(contact_assignments, user=request.user)
262-
contacts_table.columns.hide('role')
263-
contacts_table.configure(request)
264261

265262
return {
266-
'contacts_table': contacts_table,
267-
'assignment_count': ContactAssignment.objects.filter(role=instance).count(),
263+
'related_models': related_models,
268264
}
269265

270266

@@ -314,19 +310,6 @@ class ContactListView(generic.ObjectListView):
314310
class ContactView(generic.ObjectView):
315311
queryset = Contact.objects.all()
316312

317-
def get_extra_context(self, request, instance):
318-
contact_assignments = ContactAssignment.objects.restrict(request.user, 'view').filter(
319-
contact=instance
320-
)
321-
assignments_table = tables.ContactAssignmentTable(contact_assignments, user=request.user)
322-
assignments_table.columns.hide('contact')
323-
assignments_table.configure(request)
324-
325-
return {
326-
'assignments_table': assignments_table,
327-
'assignment_count': ContactAssignment.objects.filter(contact=instance).count(),
328-
}
329-
330313

331314
@register_model_view(Contact, 'edit')
332315
class ContactEditView(generic.ObjectEditView):

0 commit comments

Comments
 (0)