Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 20 additions & 8 deletions netbox/dcim/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -681,13 +681,6 @@ def get_extra_context(self, request, instance):
(PowerFeed.objects.restrict(request.user).filter(rack=instance), 'rack_id'),
)

# Get 0U devices located within the rack
nonracked_devices = Device.objects.filter(
rack=instance,
position__isnull=True,
parent_bay__isnull=True
).prefetch_related('device_type__manufacturer', 'parent_bay', 'device_role')

peer_racks = Rack.objects.restrict(request.user, 'view').filter(site=instance.site)

if instance.location:
Expand All @@ -704,7 +697,6 @@ def get_extra_context(self, request, instance):

return {
'related_models': related_models,
'nonracked_devices': nonracked_devices,
'next_rack': next_rack,
'prev_rack': prev_rack,
'svg_extra': svg_extra,
Expand All @@ -731,6 +723,26 @@ def get_children(self, request, parent):
return parent.reservations.restrict(request.user, 'view')


@register_model_view(Rack, 'nonracked_devices', 'nonracked-devices')
class RackNonRackedView(generic.ObjectChildrenView):
queryset = Rack.objects.all()
child_model = Device
table = tables.DeviceTable
filterset = filtersets.DeviceFilterSet
template_name = 'dcim/rack/non_racked_devices.html'
tab = ViewTab(
label=_('Non-Racked Devices'),
badge=lambda obj: obj.devices.filter(rack=obj, position__isnull=True, parent_bay__isnull=True).count(),
weight=500,
permission='dcim.view_device',
)

def get_children(self, request, parent):
return parent.devices.restrict(request.user, 'view').filter(
rack=parent, position__isnull=True, parent_bay__isnull=True
)


@register_model_view(Rack, 'edit')
class RackEditView(generic.ObjectEditView):
queryset = Rack.objects.all()
Expand Down
1 change: 0 additions & 1 deletion netbox/templates/dcim/rack.html
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,6 @@ <h4>Rear</h4>
</div>
</div>
{% include 'inc/panels/related_objects.html' %}
{% include 'dcim/inc/nonracked_devices.html' %}
{% plugin_right_page object %}
</div>
</div>
Expand Down
51 changes: 51 additions & 0 deletions netbox/templates/dcim/rack/non_racked_devices.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{% extends 'dcim/rack/base.html' %}
{% load helpers %}

{% block extra_controls %}
{% if perms.dcim.add_device %}
<div class="bulk-button-group">
<a href="{% url 'dcim:device_add' %}?rack={{ object.pk }}&site={{ object.site.pk }}&return_url={% url 'dcim:rack_nonracked_devices' pk=object.pk %}"
class="btn btn-primary btn-sm">
<i class="mdi mdi-plus-thick" aria-hidden="true"></i> Add non-racked device
</a>
</div>
{% endif %}
{% endblock %}

{% block content %}
{% include 'inc/table_controls_htmx.html' with table_modal="DeviceTable_config" %}

<form method="post">
{% csrf_token %}

<div class="card">
<div class="card-body htmx-container table-responsive" id="object_list">
{% include 'htmx/table.html' %}
</div>
</div>

<div class="noprint bulk-buttons">
<div class="bulk-button-group">
{% if 'bulk_edit' in actions %}
<button type="submit" name="_edit"
formaction="{% url 'dcim:device_bulk_edit' %}?return_url={% url 'dcim:rack_nonracked_devices' pk=object.pk %}"
class="btn btn-warning btn-sm">
<i class="mdi mdi-pencil" aria-hidden="true"></i> Edit
</button>
{% endif %}
{% if 'bulk_delete' in actions %}
<button type="submit"
formaction="{% url 'dcim:device_bulk_delete' %}?return_url={% url 'dcim:rack_nonracked_devices' pk=object.pk %}"
class="btn btn-danger btn-sm">
<i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete
</button>
{% endif %}
</div>
</div>
</form>
{% endblock content %}

{% block modals %}
{{ block.super }}
{% table_config_form table %}
{% endblock modals %}