Selaa lähdekoodia

fixes #3724 - allow filtering interfaces by more than one device name

John Anderson 6 vuotta sitten
vanhempi
commit
1048d3909b
2 muutettua tiedostoa jossa 8 lisäystä ja 5 poistoa
  1. 1 0
      docs/release-notes/version-2.6.md
  2. 7 5
      netbox/dcim/filters.py

+ 1 - 0
docs/release-notes/version-2.6.md

@@ -15,6 +15,7 @@
 * [#3679](https://github.com/netbox-community/netbox/issues/3679) - Fix link for assigned ipaddress in interface page
 * [#3709](https://github.com/netbox-community/netbox/issues/3709) - Prevent exception when importing an invalid cable definition
 * [#3720](https://github.com/netbox-community/netbox/issues/3720) - Correctly indicate power feed terminations on cable list
+* [#3724](https://github.com/netbox-community/netbox/issues/3724) - Fix API filtering of interfaces by more than one device name
 
 # v2.6.7 (2019-11-01)
 

+ 7 - 5
netbox/dcim/filters.py

@@ -7,8 +7,8 @@ from tenancy.filtersets import TenancyFilterSet
 from tenancy.models import Tenant
 from utilities.constants import COLOR_CHOICES
 from utilities.filters import (
-    MultiValueMACAddressFilter, MultiValueNumberFilter, NameSlugSearchFilterSet, NumericInFilter, TagFilter,
-    TreeNodeMultipleChoiceFilter,
+    MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, NameSlugSearchFilterSet, NumericInFilter,
+    TagFilter, TreeNodeMultipleChoiceFilter,
 )
 from virtualization.models import Cluster
 from .constants import *
@@ -696,7 +696,7 @@ class InterfaceFilter(django_filters.FilterSet):
         method='search',
         label='Search',
     )
-    device = django_filters.CharFilter(
+    device = MultiValueCharFilter(
         method='filter_device',
         field_name='name',
         label='Device',
@@ -749,8 +749,10 @@ class InterfaceFilter(django_filters.FilterSet):
 
     def filter_device(self, queryset, name, value):
         try:
-            device = Device.objects.get(**{name: value})
-            vc_interface_ids = device.vc_interfaces.values_list('id', flat=True)
+            devices = Device.objects.filter(**{'{}__in'.format(name): value})
+            vc_interface_ids = []
+            for device in devices:
+                vc_interface_ids.extend(device.vc_interfaces.values_list('id', flat=True))
             return queryset.filter(pk__in=vc_interface_ids)
         except Device.DoesNotExist:
             return queryset.none()