Extend IP address device filter to match virtual chassis members

This commit is contained in:
Jeremy Stretch 2018-01-22 16:42:19 -05:00
parent d80e64b2cc
commit c43487b741

View File

@ -257,16 +257,15 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
to_field_name='slug', to_field_name='slug',
label='Tenant (slug)', label='Tenant (slug)',
) )
device_id = django_filters.ModelMultipleChoiceFilter( device = django_filters.CharFilter(
name='interface__device', method='filter_device',
queryset=Device.objects.all(), name='name',
label='Device (ID)', label='Device',
) )
device = django_filters.ModelMultipleChoiceFilter( device_id = django_filters.NumberFilter(
name='interface__device__name', method='filter_device',
queryset=Device.objects.all(), name='pk',
to_field_name='name', label='Device (ID)',
label='Device (name)',
) )
virtual_machine_id = django_filters.ModelMultipleChoiceFilter( virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
name='interface__virtual_machine', name='interface__virtual_machine',
@ -319,6 +318,14 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
return queryset return queryset
return queryset.filter(address__net_mask_length=value) 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): class VLANGroupFilter(django_filters.FilterSet):
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(