Просмотр исходного кода

added device and vm tab on device role (#11500)

* added vm tab on device role

* added blank lines

* updated templates

* fixed lint issues
Abhimanyu Saharan 3 лет назад
Родитель
Сommit
ddd4f805a5

+ 38 - 0
netbox/dcim/views.py

@@ -21,7 +21,9 @@ from utilities.paginator import EnhancedPaginator, get_paginate_count
 from utilities.permissions import get_permission_for_model
 from utilities.utils import count_related
 from utilities.views import GetReturnURLMixin, ObjectPermissionRequiredMixin, ViewTab, register_model_view
+from virtualization.filtersets import VirtualMachineFilterSet
 from virtualization.models import VirtualMachine
+from virtualization.tables import VirtualMachineTable
 from . import filtersets, forms, tables
 from .choices import DeviceFaceChoices
 from .constants import NONCONNECTABLE_IFACE_TYPES
@@ -1736,6 +1738,42 @@ class DeviceRoleView(generic.ObjectView):
         }
 
 
+@register_model_view(DeviceRole, 'devices', path='devices')
+class DeviceRoleDevicesView(generic.ObjectChildrenView):
+    queryset = DeviceRole.objects.all()
+    child_model = Device
+    table = tables.DeviceTable
+    filterset = filtersets.DeviceFilterSet
+    template_name = 'dcim/devicerole/devices.html'
+    tab = ViewTab(
+        label=_('Devices'),
+        badge=lambda obj: obj.devices.count(),
+        permission='dcim.view_device',
+        weight=400
+    )
+
+    def get_children(self, request, parent):
+        return Device.objects.restrict(request.user, 'view').filter(device_role=parent)
+
+
+@register_model_view(DeviceRole, 'virtual_machines', path='virtual-machines')
+class DeviceRoleVirtualMachinesView(generic.ObjectChildrenView):
+    queryset = DeviceRole.objects.all()
+    child_model = VirtualMachine
+    table = VirtualMachineTable
+    filterset = VirtualMachineFilterSet
+    template_name = 'dcim/devicerole/virtual_machines.html'
+    tab = ViewTab(
+        label=_('Virtual machines'),
+        badge=lambda obj: obj.virtual_machines.count(),
+        permission='virtualization.view_virtualmachine',
+        weight=500
+    )
+
+    def get_children(self, request, parent):
+        return VirtualMachine.objects.restrict(request.user, 'view').filter(role=parent)
+
+
 @register_model_view(DeviceRole, 'edit')
 class DeviceRoleEditView(generic.ObjectEditView):
     queryset = DeviceRole.objects.all()

+ 0 - 7
netbox/templates/dcim/devicerole.html

@@ -71,13 +71,6 @@
 </div>
 <div class="row mb-3">
 	<div class="col col-md-12">
-    <div class="card">
-      <h5 class="card-header">Devices</h5>
-      <div class="card-body table-responsive">
-        {% render_table devices_table 'inc/table.html' %}
-        {% include 'inc/paginator.html' with paginator=devices_table.paginator page=devices_table.page %}
-      </div>
-    </div>
     {% plugin_full_width_page object %}
   </div>
 </div>

+ 20 - 0
netbox/templates/dcim/devicerole/devices.html

@@ -0,0 +1,20 @@
+{% extends 'dcim/devicerole.html' %}
+{% load helpers %}
+{% load render_table from django_tables2 %}
+
+{% 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" id="object_list">
+                {% include 'htmx/table.html' %}
+            </div>
+        </div>
+    </form>
+{% endblock content %}
+
+{% block modals %}
+    {{ block.super }}
+    {% table_config_form table %}
+{% endblock modals %}

+ 20 - 0
netbox/templates/dcim/devicerole/virtual_machines.html

@@ -0,0 +1,20 @@
+{% extends 'dcim/devicerole.html' %}
+{% load helpers %}
+{% load render_table from django_tables2 %}
+
+{% block content %}
+    {% include 'inc/table_controls_htmx.html' with table_modal='VirtualMachineTable_config' %}
+    <form method="post">
+        {% csrf_token %}
+        <div class="card">
+            <div class="card-body" id="object_list">
+                {% include 'htmx/table.html' %}
+            </div>
+        </div>
+    </form>
+{% endblock content %}
+
+{% block modals %}
+    {{ block.super }}
+    {% table_config_form table %}
+{% endblock modals %}