From 94f53146499fb0e636e8689fbae0825cee4d9e13 Mon Sep 17 00:00:00 2001 From: Roy Vegard Ovesen Date: Sun, 9 Oct 2022 19:12:59 +0200 Subject: [PATCH] Filter by rack (#175) Fixes #174 --- netbox_topology_views/filters.py | 7 ++++++- netbox_topology_views/forms.py | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/netbox_topology_views/filters.py b/netbox_topology_views/filters.py index 29c915d..232aabb 100644 --- a/netbox_topology_views/filters.py +++ b/netbox_topology_views/filters.py @@ -2,7 +2,7 @@ from cProfile import label import django_filters from django.db.models import Q -from dcim.models import Device, DeviceRole, Region, Site, Location +from dcim.models import Device, DeviceRole, Region, Site, Location, Rack from dcim.choices import DeviceStatusChoices from netbox.filtersets import NetBoxModelFilterSet @@ -39,6 +39,11 @@ class DeviceFilterSet(TenancyFilterSet, NetBoxModelFilterSet): lookup_expr='in', label='Location (ID)', ) + rack_id = django_filters.ModelMultipleChoiceFilter( + queryset=Rack.objects.all(), + field_name='rack_id', + label='Rack (ID)', + ) status = django_filters.MultipleChoiceFilter( choices=DeviceStatusChoices, null_value=None, diff --git a/netbox_topology_views/forms.py b/netbox_topology_views/forms.py index ac483c5..4121f6f 100644 --- a/netbox_topology_views/forms.py +++ b/netbox_topology_views/forms.py @@ -5,7 +5,7 @@ from django.conf import settings from django.utils.translation import gettext as _ -from dcim.models import Device, Site, Region, DeviceRole, Location +from dcim.models import Device, Site, Region, DeviceRole, Location, Rack from django import forms from dcim.choices import DeviceStatusChoices @@ -23,7 +23,7 @@ class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): fieldsets = ( (None, ('q', 'hide_unconnected', 'save_coords', 'show_circuit', 'show_power' ,)), (None, ('tenant_group_id', 'tenant_id',)), - (None, ('region_id', 'site_id', 'location_id',)), + (None, ('region_id', 'site_id', 'location_id', 'rack_id')), (None, ('device_role_id','id','status', )), (None, ('tag', )), ) @@ -66,6 +66,16 @@ class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): }, label=_('Location') ) + rack_id = DynamicModelMultipleChoiceField( + queryset=Rack.objects.all(), + required=False, + query_params={ + 'region_id': '$region_id', + 'site_id': '$site_id', + 'location_id': '$location_id', + }, + label=_('Rack') + ) hide_unconnected = forms.BooleanField( label=_("Hide Unconnected"), required=False,