fix filter + added preselected roles

This commit is contained in:
Mattijs Vanhaverbeke
2022-02-22 13:54:35 +01:00
parent deedee78bd
commit 064751f727
5 changed files with 25 additions and 8 deletions
+6 -5
View File
@@ -10,12 +10,13 @@ class TopologyViewsConfig(PluginConfig):
base_url = 'netbox_topology_views' base_url = 'netbox_topology_views'
required_settings = [] required_settings = []
default_settings = { default_settings = {
'preselected_device_roles': 'Firewall,Router,Distribution Switch,Core Switch,Internal Switch,Access Switch,Server,Storage,Backup,Wireless AP', 'preselected_device_roles': ['Firewall', 'Router', 'Distribution Switch', 'Core Switch', 'Internal Switch', 'Access Switch', 'Server', 'Storage', 'Backup', 'Wireless AP'],
'ignore_cable_type': 'power outlet,power port', 'ignore_cable_type': ['power outlet','power port'],
'device_img': 'access-switch,core-switch,firewall,router,distribution-switch,backup,storage,wan-network,wireless-ap,server,internal-switch,isp-cpe-material,non-racked-devices,power-units', 'device_img': ['access-switch', 'core-switch', 'firewall', 'router', 'distribution-switch', 'backup', 'storage,wan-network', 'wireless-ap', 'server', 'internal-switch', 'isp-cpe-material', 'non-racked-devices', 'power-units'],
'allow_coordinates_saving': False, 'allow_coordinates_saving': False,
'preselected_tags' : '', 'preselected_tags' : [],
'enable_circuit_terminations': False 'enable_circuit_terminations': False,
'draw_default_layout': False
} }
config = TopologyViewsConfig config = TopologyViewsConfig
+1 -1
View File
@@ -11,7 +11,7 @@ class DeviceFilterSet(django_filters.FilterSet):
) )
tag = TagFilter() tag = TagFilter()
role_id = django_filters.ModelMultipleChoiceFilter( device_role_id = django_filters.ModelMultipleChoiceFilter(
field_name='device_role_id', field_name='device_role_id',
queryset=DeviceRole.objects.all(), queryset=DeviceRole.objects.all(),
label='Role (ID)', label='Role (ID)',
-1
View File
@@ -46,4 +46,3 @@ class DeviceFilterForm(CustomFieldModelFilterForm):
) )
tag = TagFilterField(model) tag = TagFilterField(model)
@@ -1,3 +1,4 @@
#visgraph { #visgraph {
height: 70vh; height: 70vh;
} }
+17 -1
View File
@@ -3,12 +3,16 @@ from django.db.models import Q
from django.views.generic import View from django.views.generic import View
from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.mixins import PermissionRequiredMixin
from django.conf import settings from django.conf import settings
from django.http import QueryDict
from django.http import HttpResponseRedirect
from .forms import DeviceFilterForm from .forms import DeviceFilterForm
from .filters import DeviceFilterSet from .filters import DeviceFilterSet
import json import json
from dcim.models import Device, Cable, DeviceRole, DeviceType from dcim.models import Device, Cable, DeviceRole, DeviceType
from extras.models import Tag
def get_topology_data(queryset): def get_topology_data(queryset):
nodes = [] nodes = []
@@ -133,7 +137,6 @@ def get_topology_data(queryset):
node["color.border"] = "#" + qs_device.device_role.color node["color.border"] = "#" + qs_device.device_role.color
if "coordinates" in qs_device.custom_field_data: if "coordinates" in qs_device.custom_field_data:
print(qs_device.custom_field_data)
if qs_device.custom_field_data["coordinates"] is not None: if qs_device.custom_field_data["coordinates"] is not None:
cords = qs_device.custom_field_data["coordinates"].split(";") cords = qs_device.custom_field_data["coordinates"].split(";")
node["x"] = int(cords[0]) node["x"] = int(cords[0])
@@ -160,6 +163,19 @@ class TopologyHomeView(PermissionRequiredMixin, View):
topo_data = None topo_data = None
if request.GET: if request.GET:
topo_data = get_topology_data(self.queryset) topo_data = get_topology_data(self.queryset)
else:
preselected_device_roles = settings.PLUGINS_CONFIG["netbox_topology_views"]["preselected_device_roles"]
preselected_tags = settings.PLUGINS_CONFIG["netbox_topology_views"]["preselected_tags"]
q_device_role_id = DeviceRole.objects.filter(name__in=preselected_device_roles).values_list('id', flat=True)
q_tags = Tag.objects.filter(name__in=preselected_tags).values_list('name', flat=True)
q = QueryDict(mutable=True)
q.setlist('device_role_id', list(q_device_role_id))
q.setlist('tag', list(q_tags))
query_string = q.urlencode()
print(query_string)
return HttpResponseRedirect(request.path + "?" + query_string)
return render(request, 'netbox_topology_views/index.html' , { return render(request, 'netbox_topology_views/index.html' , {
'filter_form': DeviceFilterForm(request.GET, label_suffix=''), 'filter_form': DeviceFilterForm(request.GET, label_suffix=''),