Skip to content

Commit 80d1f80

Browse files
committed
Fixes #3827: Allow filtering console/power/interface connections by device ID
1 parent 523a138 commit 80d1f80

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

docs/release-notes/version-2.6.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* [#3762](https://github.com/netbox-community/netbox/issues/3762) - Add date/time picker widgets
1111
* [#3788](https://github.com/netbox-community/netbox/issues/3788) - Enable partial search for inventory items
1212
* [#3812](https://github.com/netbox-community/netbox/issues/3812) - Optimize size of pages containing a dynamic selection field
13+
* [#3827](https://github.com/netbox-community/netbox/issues/3827) - Allow filtering console/power/interface connections by device ID
1314

1415
## Bug Fixes
1516

netbox/dcim/filters.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -978,9 +978,12 @@ class ConsoleConnectionFilter(django_filters.FilterSet):
978978
method='filter_site',
979979
label='Site (slug)',
980980
)
981-
device = django_filters.CharFilter(
981+
device_id = MultiValueNumberFilter(
982+
method='filter_device'
983+
)
984+
device = MultiValueCharFilter(
982985
method='filter_device',
983-
label='Device',
986+
field_name='device__name'
984987
)
985988

986989
class Meta:
@@ -993,11 +996,11 @@ def filter_site(self, queryset, name, value):
993996
return queryset.filter(connected_endpoint__device__site__slug=value)
994997

995998
def filter_device(self, queryset, name, value):
996-
if not value.strip():
999+
if not value:
9971000
return queryset
9981001
return queryset.filter(
999-
Q(device__name__icontains=value) |
1000-
Q(connected_endpoint__device__name__icontains=value)
1002+
Q(**{'{}__in'.format(name): value}) |
1003+
Q(**{'connected_endpoint__{}__in'.format(name): value})
10011004
)
10021005

10031006

@@ -1006,9 +1009,12 @@ class PowerConnectionFilter(django_filters.FilterSet):
10061009
method='filter_site',
10071010
label='Site (slug)',
10081011
)
1009-
device = django_filters.CharFilter(
1012+
device_id = MultiValueNumberFilter(
1013+
method='filter_device'
1014+
)
1015+
device = MultiValueCharFilter(
10101016
method='filter_device',
1011-
label='Device',
1017+
field_name='device__name'
10121018
)
10131019

10141020
class Meta:
@@ -1021,11 +1027,11 @@ def filter_site(self, queryset, name, value):
10211027
return queryset.filter(_connected_poweroutlet__device__site__slug=value)
10221028

10231029
def filter_device(self, queryset, name, value):
1024-
if not value.strip():
1030+
if not value:
10251031
return queryset
10261032
return queryset.filter(
1027-
Q(device__name__icontains=value) |
1028-
Q(_connected_poweroutlet__device__name__icontains=value)
1033+
Q(**{'{}__in'.format(name): value}) |
1034+
Q(**{'_connected_poweroutlet__{}__in'.format(name): value})
10291035
)
10301036

10311037

@@ -1034,9 +1040,12 @@ class InterfaceConnectionFilter(django_filters.FilterSet):
10341040
method='filter_site',
10351041
label='Site (slug)',
10361042
)
1037-
device = django_filters.CharFilter(
1043+
device_id = MultiValueNumberFilter(
1044+
method='filter_device'
1045+
)
1046+
device = MultiValueCharFilter(
10381047
method='filter_device',
1039-
label='Device',
1048+
field_name='device__name'
10401049
)
10411050

10421051
class Meta:
@@ -1052,11 +1061,11 @@ def filter_site(self, queryset, name, value):
10521061
)
10531062

10541063
def filter_device(self, queryset, name, value):
1055-
if not value.strip():
1064+
if not value:
10561065
return queryset
10571066
return queryset.filter(
1058-
Q(device__name__icontains=value) |
1059-
Q(_connected_interface__device__name__icontains=value)
1067+
Q(**{'{}__in'.format(name): value}) |
1068+
Q(**{'_connected_interface__{}__in'.format(name): value})
10601069
)
10611070

10621071

0 commit comments

Comments
 (0)