|
8 | 8 | from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
|
9 | 9 | from tenancy.filters import TenancyFilterSet
|
10 | 10 | from utilities.filters import (
|
11 |
| - MultiValueCharFilter, NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter, |
| 11 | + MultiValueCharFilter, MultiValueNumberFilter, NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter, |
12 | 12 | )
|
13 | 13 | from virtualization.models import VirtualMachine
|
14 | 14 | from .choices import *
|
@@ -304,12 +304,12 @@ class IPAddressFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedF
|
304 | 304 | to_field_name='rd',
|
305 | 305 | label='VRF (RD)',
|
306 | 306 | )
|
307 |
| - device = django_filters.CharFilter( |
| 307 | + device = MultiValueCharFilter( |
308 | 308 | method='filter_device',
|
309 | 309 | field_name='name',
|
310 |
| - label='Device', |
| 310 | + label='Device (name)', |
311 | 311 | )
|
312 |
| - device_id = django_filters.NumberFilter( |
| 312 | + device_id = MultiValueNumberFilter( |
313 | 313 | method='filter_device',
|
314 | 314 | field_name='pk',
|
315 | 315 | label='Device (ID)',
|
@@ -385,8 +385,10 @@ def filter_mask_length(self, queryset, name, value):
|
385 | 385 |
|
386 | 386 | def filter_device(self, queryset, name, value):
|
387 | 387 | try:
|
388 |
| - device = Device.objects.prefetch_related('device_type').get(**{name: value}) |
389 |
| - vc_interface_ids = [i['id'] for i in device.vc_interfaces.values('id')] |
| 388 | + devices = Device.objects.prefetch_related('device_type').filter(**{'{}__in'.format(name): value}) |
| 389 | + vc_interface_ids = [] |
| 390 | + for device in devices: |
| 391 | + vc_interface_ids.extend([i['id'] for i in device.vc_interfaces.values('id')]) |
390 | 392 | return queryset.filter(interface_id__in=vc_interface_ids)
|
391 | 393 | except Device.DoesNotExist:
|
392 | 394 | return queryset.none()
|
|
0 commit comments