Skip to content

Commit 2c3fe97

Browse files
authored
Fixes #19110: Add filters by IP addresses to PrimaryIPFilterSet (#19160)
* Add primary ip filters by address * Add tests for Device and VirtualDeviceContext models
1 parent cd3d91e commit 2c3fe97

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

netbox/dcim/tests/test_filtersets.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2619,15 +2619,23 @@ def test_primary_ip4(self):
26192619
addresses = IPAddress.objects.filter(address__family=4)
26202620
params = {'primary_ip4_id': [addresses[0].pk, addresses[1].pk]}
26212621
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
2622+
params = {'primary_ip4': [str(addresses[0].address), str(addresses[1].address)]}
2623+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
26222624
params = {'primary_ip4_id': [addresses[2].pk]}
26232625
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
2626+
params = {'primary_ip4': [str(addresses[2].address)]}
2627+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
26242628

26252629
def test_primary_ip6(self):
26262630
addresses = IPAddress.objects.filter(address__family=6)
26272631
params = {'primary_ip6_id': [addresses[0].pk, addresses[1].pk]}
26282632
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
2633+
params = {'primary_ip6': [str(addresses[0].address), str(addresses[1].address)]}
2634+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
26292635
params = {'primary_ip6_id': [addresses[2].pk]}
26302636
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
2637+
params = {'primary_ip6': [str(addresses[2].address)]}
2638+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
26312639

26322640
def test_virtual_chassis_id(self):
26332641
params = {'virtual_chassis_id': [VirtualChassis.objects.first().pk]}
@@ -6452,15 +6460,23 @@ def test_primary_ip4(self):
64526460
addresses = IPAddress.objects.filter(address__family=4)
64536461
params = {'primary_ip4_id': [addresses[0].pk, addresses[1].pk]}
64546462
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
6463+
params = {'primary_ip4': [str(addresses[0].address), str(addresses[1].address)]}
6464+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
64556465
params = {'primary_ip4_id': [addresses[2].pk]}
64566466
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
6467+
params = {'primary_ip4': [str(addresses[2].address)]}
6468+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
64576469

64586470
def test_primary_ip6(self):
64596471
addresses = IPAddress.objects.filter(address__family=6)
64606472
params = {'primary_ip6_id': [addresses[0].pk, addresses[1].pk]}
64616473
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
6474+
params = {'primary_ip6': [str(addresses[0].address), str(addresses[1].address)]}
6475+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
64626476
params = {'primary_ip6_id': [addresses[2].pk]}
64636477
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
6478+
params = {'primary_ip6': [str(addresses[2].address)]}
6479+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
64646480

64656481

64666482
class MACAddressTestCase(TestCase, ChangeLoggedFilterSetTests):

netbox/ipam/filtersets.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1219,8 +1219,20 @@ class PrimaryIPFilterSet(django_filters.FilterSet):
12191219
queryset=IPAddress.objects.all(),
12201220
label=_('Primary IPv4 (ID)'),
12211221
)
1222+
primary_ip4 = django_filters.ModelMultipleChoiceFilter(
1223+
field_name='primary_ip4__address',
1224+
queryset=IPAddress.objects.all(),
1225+
to_field_name='address',
1226+
label=_('Primary IPv4 (address)'),
1227+
)
12221228
primary_ip6_id = django_filters.ModelMultipleChoiceFilter(
12231229
field_name='primary_ip6',
12241230
queryset=IPAddress.objects.all(),
12251231
label=_('Primary IPv6 (ID)'),
12261232
)
1233+
primary_ip6 = django_filters.ModelMultipleChoiceFilter(
1234+
field_name='primary_ip6__address',
1235+
queryset=IPAddress.objects.all(),
1236+
to_field_name='address',
1237+
label=_('Primary IPv6 (address)'),
1238+
)

netbox/virtualization/tests/test_filtersets.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,15 +525,23 @@ def test_primary_ip4(self):
525525
addresses = IPAddress.objects.filter(address__family=4)
526526
params = {'primary_ip4_id': [addresses[0].pk, addresses[1].pk]}
527527
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
528+
params = {'primary_ip4': [str(addresses[0].address), str(addresses[1].address)]}
529+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
528530
params = {'primary_ip4_id': [addresses[2].pk]}
529531
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
532+
params = {'primary_ip4': [str(addresses[2].address)]}
533+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
530534

531535
def test_primary_ip6(self):
532536
addresses = IPAddress.objects.filter(address__family=6)
533537
params = {'primary_ip6_id': [addresses[0].pk, addresses[1].pk]}
534538
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
539+
params = {'primary_ip6': [str(addresses[0].address), str(addresses[1].address)]}
540+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
535541
params = {'primary_ip6_id': [addresses[2].pk]}
536542
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
543+
params = {'primary_ip6': [str(addresses[2].address)]}
544+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0)
537545

538546
def test_serial_number(self):
539547
params = {'serial': ['111-aaa', '222-bbb']}

0 commit comments

Comments
 (0)