From 67a30fdf91520d864e4cd45909f1679d5ffc10eb Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 15 Dec 2017 15:31:35 -0500 Subject: [PATCH] Added virtual_chassis_id API filter for interfaces --- netbox/dcim/filters.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index d434871d6..e63de6f9a 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -17,7 +17,7 @@ from .models import ( ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, DeviceBayTemplate, DeviceRole, DeviceType, Interface, InterfaceConnection, InterfaceTemplate, Manufacturer, InventoryItem, Platform, PowerOutlet, PowerOutletTemplate, PowerPort, PowerPortTemplate, Rack, RackGroup, - RackReservation, RackRole, Region, Site, VCMembership, + RackReservation, RackRole, Region, Site, VirtualChassis, VCMembership, ) @@ -569,6 +569,11 @@ class InterfaceFilter(django_filters.FilterSet): method='_mac_address', label='MAC address', ) + virtual_chassis_id = django_filters.NumberFilter( + method='_virtual_chassis_id', + name='pk', + label='Virtual chassis (ID)', + ) class Meta: model = Interface @@ -601,6 +606,14 @@ class InterfaceFilter(django_filters.FilterSet): except AddrFormatError: return queryset.none() + def _virtual_chassis_id(self, queryset, name, value): + try: + virtual_chassis = VirtualChassis.objects.get(**{name: value}) + ordering = virtual_chassis.master.device_type.interface_ordering + return queryset.filter(device__vc_membership__virtual_chassis=virtual_chassis).order_naturally(ordering) + except VirtualChassis.DoesNotExist: + return queryset.none() + class DeviceBayFilter(DeviceComponentFilterSet):