From c43487b7418da030e678f8a4dde8bf13352dcdb8 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 22 Jan 2018 16:42:19 -0500 Subject: [PATCH] Extend IP address device filter to match virtual chassis members --- netbox/ipam/filters.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index 7cd00cc2c..005d44a84 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -257,16 +257,15 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): to_field_name='slug', label='Tenant (slug)', ) - device_id = django_filters.ModelMultipleChoiceFilter( - name='interface__device', - queryset=Device.objects.all(), - label='Device (ID)', + device = django_filters.CharFilter( + method='filter_device', + name='name', + label='Device', ) - device = django_filters.ModelMultipleChoiceFilter( - name='interface__device__name', - queryset=Device.objects.all(), - to_field_name='name', - label='Device (name)', + device_id = django_filters.NumberFilter( + method='filter_device', + name='pk', + label='Device (ID)', ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( name='interface__virtual_machine', @@ -319,6 +318,14 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): return queryset return queryset.filter(address__net_mask_length=value) + def filter_device(self, queryset, name, value): + try: + device = Device.objects.select_related('device_type').get(**{name: value}) + vc_interface_ids = [i['id'] for i in device.vc_interfaces.values('id')] + return queryset.filter(interface_id__in=vc_interface_ids) + except Device.DoesNotExist: + return queryset.none() + class VLANGroupFilter(django_filters.FilterSet): site_id = django_filters.ModelMultipleChoiceFilter(