Skip to content

Commit 3ab5682

Browse files
committed
Fixes #7460: Fix filtering connections by site ID
1 parent c0010ec commit 3ab5682

File tree

2 files changed

+50
-68
lines changed

2 files changed

+50
-68
lines changed

docs/release-notes/version-3.0.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* [#7446](https://github.com/netbox-community/netbox/issues/7446) - Fix exception when viewing a large number of child IPs within a prefix
99
* [#7455](https://github.com/netbox-community/netbox/issues/7455) - Fix site/provider network validation for circuit termination API serializer
1010
* [#7459](https://github.com/netbox-community/netbox/issues/7459) - Pre-populate location data when adding a device to a rack
11+
* [#7460](https://github.com/netbox-community/netbox/issues/7460) - Fix filtering connections by site ID
1112

1213
---
1314

netbox/dcim/filtersets.py

Lines changed: 49 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from .constants import *
1818
from .models import *
1919

20-
2120
__all__ = (
2221
'CableFilterSet',
2322
'CableTerminationFilterSet',
@@ -1243,73 +1242,6 @@ def filter_device(self, queryset, name, value):
12431242
return queryset
12441243

12451244

1246-
class ConnectionFilterSet(BaseFilterSet):
1247-
1248-
def filter_site(self, queryset, name, value):
1249-
if not value.strip():
1250-
return queryset
1251-
return queryset.filter(device__site__slug=value)
1252-
1253-
def filter_device(self, queryset, name, value):
1254-
if not value:
1255-
return queryset
1256-
return queryset.filter(**{f'{name}__in': value})
1257-
1258-
1259-
class ConsoleConnectionFilterSet(ConnectionFilterSet):
1260-
site = django_filters.CharFilter(
1261-
method='filter_site',
1262-
label='Site (slug)',
1263-
)
1264-
device_id = MultiValueNumberFilter(
1265-
method='filter_device'
1266-
)
1267-
device = MultiValueCharFilter(
1268-
method='filter_device',
1269-
field_name='device__name'
1270-
)
1271-
1272-
class Meta:
1273-
model = ConsolePort
1274-
fields = ['name']
1275-
1276-
1277-
class PowerConnectionFilterSet(ConnectionFilterSet):
1278-
site = django_filters.CharFilter(
1279-
method='filter_site',
1280-
label='Site (slug)',
1281-
)
1282-
device_id = MultiValueNumberFilter(
1283-
method='filter_device'
1284-
)
1285-
device = MultiValueCharFilter(
1286-
method='filter_device',
1287-
field_name='device__name'
1288-
)
1289-
1290-
class Meta:
1291-
model = PowerPort
1292-
fields = ['name']
1293-
1294-
1295-
class InterfaceConnectionFilterSet(ConnectionFilterSet):
1296-
site = django_filters.CharFilter(
1297-
method='filter_site',
1298-
label='Site (slug)',
1299-
)
1300-
device_id = MultiValueNumberFilter(
1301-
method='filter_device'
1302-
)
1303-
device = MultiValueCharFilter(
1304-
method='filter_device',
1305-
field_name='device__name'
1306-
)
1307-
1308-
class Meta:
1309-
model = Interface
1310-
fields = []
1311-
1312-
13131245
class PowerPanelFilterSet(PrimaryModelFilterSet):
13141246
q = django_filters.CharFilter(
13151247
method='search',
@@ -1441,3 +1373,52 @@ def search(self, queryset, name, value):
14411373
Q(comments__icontains=value)
14421374
)
14431375
return queryset.filter(qs_filter)
1376+
1377+
1378+
#
1379+
# Connection filter sets
1380+
#
1381+
1382+
class ConnectionFilterSet(BaseFilterSet):
1383+
site_id = MultiValueNumberFilter(
1384+
method='filter_connections',
1385+
field_name='device__site_id'
1386+
)
1387+
site = MultiValueCharFilter(
1388+
method='filter_connections',
1389+
field_name='device__site__slug'
1390+
)
1391+
device_id = MultiValueNumberFilter(
1392+
method='filter_connections',
1393+
field_name='device_id'
1394+
)
1395+
device = MultiValueCharFilter(
1396+
method='filter_connections',
1397+
field_name='device__name'
1398+
)
1399+
1400+
def filter_connections(self, queryset, name, value):
1401+
if not value:
1402+
return queryset
1403+
return queryset.filter(**{f'{name}__in': value})
1404+
1405+
1406+
class ConsoleConnectionFilterSet(ConnectionFilterSet):
1407+
1408+
class Meta:
1409+
model = ConsolePort
1410+
fields = ['name']
1411+
1412+
1413+
class PowerConnectionFilterSet(ConnectionFilterSet):
1414+
1415+
class Meta:
1416+
model = PowerPort
1417+
fields = ['name']
1418+
1419+
1420+
class InterfaceConnectionFilterSet(ConnectionFilterSet):
1421+
1422+
class Meta:
1423+
model = Interface
1424+
fields = []

0 commit comments

Comments
 (0)