Skip to content

Commit 505cb9c

Browse files
committed
Enabled filtering virtual chassis devices
1 parent d5c4a9d commit 505cb9c

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

docs/release-notes/version-2.7.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
## Bug Fixes
1111

12+
* [#3507](https://github.com/netbox-community/netbox/issues/3507) - Fix filtering IPaddress by multiple devices
1213
* [#4089](https://github.com/netbox-community/netbox/issues/4089) - Selection of power outlet type during bulk update is optional
1314
* [#4090](https://github.com/netbox-community/netbox/issues/4090) - Render URL custom fields as links under object view
1415
* [#4091](https://github.com/netbox-community/netbox/issues/4091) - Fix filtering of objects by custom fields using UI search form
@@ -26,7 +27,6 @@
2627

2728
## Bug Fixes
2829

29-
* [#3507](https://github.com/netbox-community/netbox/issues/3507) - Fix filtering IPaddress by multiple devices
3030
* [#4030](https://github.com/netbox-community/netbox/issues/4030) - Fix exception when bulk editing interfaces (revised)
3131
* [#4043](https://github.com/netbox-community/netbox/issues/4043) - Fix toggling of required fields in custom scripts
3232
* [#4049](https://github.com/netbox-community/netbox/issues/4049) - Restore missing `tags` field in IPAM service serializer

netbox/ipam/filters.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
99
from tenancy.filters import TenancyFilterSet
1010
from utilities.filters import (
11-
MultiValueCharFilter, NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter,
11+
MultiValueCharFilter, MultiValueNumberFilter, NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter,
1212
)
1313
from virtualization.models import VirtualMachine
1414
from .choices import *
@@ -304,15 +304,14 @@ class IPAddressFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedF
304304
to_field_name='rd',
305305
label='VRF (RD)',
306306
)
307-
device = django_filters.ModelMultipleChoiceFilter(
308-
field_name='interface__device__name',
309-
queryset=Device.objects.all(),
310-
to_field_name='name',
307+
device = MultiValueCharFilter(
308+
method='filter_device',
309+
field_name='name',
311310
label='Device (name)',
312311
)
313-
device_id = django_filters.ModelMultipleChoiceFilter(
314-
field_name='interface__device',
315-
queryset=Device.objects.all(),
312+
device_id = MultiValueNumberFilter(
313+
method='filter_device',
314+
field_name='pk',
316315
label='Device (ID)',
317316
)
318317
virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
@@ -386,8 +385,10 @@ def filter_mask_length(self, queryset, name, value):
386385

387386
def filter_device(self, queryset, name, value):
388387
try:
389-
device = Device.objects.prefetch_related('device_type').get(**{name: value})
390-
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')])
391392
return queryset.filter(interface_id__in=vc_interface_ids)
392393
except Device.DoesNotExist:
393394
return queryset.none()

0 commit comments

Comments
 (0)