diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 35ab0ee20..095314e7b 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -677,8 +677,6 @@ class RackView(generic.ObjectView): next_rack = peer_racks.filter(_name__gt=instance._name).first() prev_rack = peer_racks.filter(_name__lt=instance._name).reverse().first() - reservations = RackReservation.objects.restrict(request.user, 'view').filter(rack=instance) - # Determine any additional parameters to pass when embedding the rack elevations svg_extra = '&'.join([ f'highlight=id:{pk}' for pk in request.GET.getlist('device') @@ -686,7 +684,6 @@ class RackView(generic.ObjectView): return { 'related_models': related_models, - 'reservations': reservations, 'nonracked_devices': nonracked_devices, 'next_rack': next_rack, 'prev_rack': prev_rack, @@ -694,6 +691,25 @@ class RackView(generic.ObjectView): } +@register_model_view(Rack, 'reservations') +class RackRackReservationsView(generic.ObjectChildrenView): + queryset = Rack.objects.all() + child_model = RackReservation + table = tables.RackReservationTable + filterset = filtersets.RackReservationFilterSet + template_name = 'dcim/rack/reservations.html' + tab = ViewTab( + label=_('Reservations'), + badge=lambda obj: obj.reservations.count(), + permission='dcim.view_rackreservation', + weight=510, + hide_if_empty=True + ) + + def get_children(self, request, parent): + return parent.reservations.restrict(request.user, 'view') + + @register_model_view(Rack, 'edit') class RackEditView(generic.ObjectEditView): queryset = Rack.objects.all() diff --git a/netbox/templates/dcim/rack.html b/netbox/templates/dcim/rack.html index c155f2796..9cb046b4e 100644 --- a/netbox/templates/dcim/rack.html +++ b/netbox/templates/dcim/rack.html @@ -1,31 +1,9 @@ -{% extends 'generic/object.html' %} +{% extends 'dcim/rack/base.html' %} {% load buttons %} {% load helpers %} {% load static %} {% load plugins %} -{% block title %}Rack {{ object }}{% endblock %} - -{% block breadcrumbs %} - {{ block.super }} -
Units | -Tenant | -Description | -- |
---|---|---|---|
{{ resv|linkify:"unit_list" }} | -{{ resv.tenant|linkify|placeholder }} | -
- {{ resv.description }} - {{ resv.user }} · {{ resv.created|annotated_date }} - |
-
-