Procházet zdrojové kódy

moves non-racked devices to tab #11803

Abhimanyu Saharan před 2 roky
rodič
revize
7158360dfa

+ 20 - 8
netbox/dcim/views.py

@@ -681,13 +681,6 @@ class RackView(generic.ObjectView):
             (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:
@@ -704,7 +697,6 @@ class RackView(generic.ObjectView):
 
         return {
             'related_models': related_models,
-            'nonracked_devices': nonracked_devices,
             'next_rack': next_rack,
             'prev_rack': prev_rack,
             'svg_extra': svg_extra,
@@ -731,6 +723,26 @@ class RackRackReservationsView(generic.ObjectChildrenView):
         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()

+ 0 - 1
netbox/templates/dcim/rack.html

@@ -190,7 +190,6 @@
             </div>
         </div>
         {% include 'inc/panels/related_objects.html' %}
-        {% include 'dcim/inc/nonracked_devices.html' %}
         {% plugin_right_page object %}
     </div>
   </div>

+ 51 - 0
netbox/templates/dcim/rack/non_racked_devices.html

@@ -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 %}