diff --git a/docs/release-notes/version-2.6.md b/docs/release-notes/version-2.6.md index cc3111872..3eee2df6f 100644 --- a/docs/release-notes/version-2.6.md +++ b/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) diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 8bcf0a0fc..cea279ddd 100644 --- a/netbox/dcim/filters.py +++ b/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()