From 87b9c2efc9d9e608984773fc9db0abd4fbed4de2 Mon Sep 17 00:00:00 2001 From: Artem Kotik Date: Sat, 12 Apr 2025 17:31:07 +0200 Subject: [PATCH 1/2] Add primary ip filters by address --- netbox/ipam/filtersets.py | 12 ++++++++++++ netbox/virtualization/tests/test_filtersets.py | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 81cbd2ef8ed..238f3a9141e 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -1193,8 +1193,20 @@ class PrimaryIPFilterSet(django_filters.FilterSet): queryset=IPAddress.objects.all(), label=_('Primary IPv4 (ID)'), ) + primary_ip4 = django_filters.ModelMultipleChoiceFilter( + field_name='primary_ip4__address', + queryset=IPAddress.objects.all(), + to_field_name='address', + label=_('Primary IPv4 (address)'), + ) primary_ip6_id = django_filters.ModelMultipleChoiceFilter( field_name='primary_ip6', queryset=IPAddress.objects.all(), label=_('Primary IPv6 (ID)'), ) + primary_ip6 = django_filters.ModelMultipleChoiceFilter( + field_name='primary_ip6__address', + queryset=IPAddress.objects.all(), + to_field_name='address', + label=_('Primary IPv6 (address)'), + ) diff --git a/netbox/virtualization/tests/test_filtersets.py b/netbox/virtualization/tests/test_filtersets.py index eef5d6b5200..2fd7fe12ffb 100644 --- a/netbox/virtualization/tests/test_filtersets.py +++ b/netbox/virtualization/tests/test_filtersets.py @@ -525,15 +525,23 @@ def test_primary_ip4(self): addresses = IPAddress.objects.filter(address__family=4) params = {'primary_ip4_id': [addresses[0].pk, addresses[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'primary_ip4': [str(addresses[0].address), str(addresses[1].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'primary_ip4_id': [addresses[2].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) + params = {'primary_ip4': [str(addresses[2].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) def test_primary_ip6(self): addresses = IPAddress.objects.filter(address__family=6) params = {'primary_ip6_id': [addresses[0].pk, addresses[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'primary_ip6': [str(addresses[0].address), str(addresses[1].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'primary_ip6_id': [addresses[2].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) + params = {'primary_ip6': [str(addresses[2].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) def test_serial_number(self): params = {'serial': ['111-aaa', '222-bbb']} From 0b56197967603975f3483f1d5ee447bbc3db1a6c Mon Sep 17 00:00:00 2001 From: Artem Kotik Date: Wed, 16 Apr 2025 10:09:20 +0200 Subject: [PATCH 2/2] Add tests for Device and VirtualDeviceContext models --- netbox/dcim/tests/test_filtersets.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index ede1e2a09d3..d7f775e26e9 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -2617,15 +2617,23 @@ def test_primary_ip4(self): addresses = IPAddress.objects.filter(address__family=4) params = {'primary_ip4_id': [addresses[0].pk, addresses[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'primary_ip4': [str(addresses[0].address), str(addresses[1].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'primary_ip4_id': [addresses[2].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) + params = {'primary_ip4': [str(addresses[2].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) def test_primary_ip6(self): addresses = IPAddress.objects.filter(address__family=6) params = {'primary_ip6_id': [addresses[0].pk, addresses[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'primary_ip6': [str(addresses[0].address), str(addresses[1].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'primary_ip6_id': [addresses[2].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) + params = {'primary_ip6': [str(addresses[2].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) def test_virtual_chassis_id(self): params = {'virtual_chassis_id': [VirtualChassis.objects.first().pk]} @@ -6450,15 +6458,23 @@ def test_primary_ip4(self): addresses = IPAddress.objects.filter(address__family=4) params = {'primary_ip4_id': [addresses[0].pk, addresses[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'primary_ip4': [str(addresses[0].address), str(addresses[1].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'primary_ip4_id': [addresses[2].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) + params = {'primary_ip4': [str(addresses[2].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) def test_primary_ip6(self): addresses = IPAddress.objects.filter(address__family=6) params = {'primary_ip6_id': [addresses[0].pk, addresses[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'primary_ip6': [str(addresses[0].address), str(addresses[1].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'primary_ip6_id': [addresses[2].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) + params = {'primary_ip6': [str(addresses[2].address)]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) class MACAddressTestCase(TestCase, ChangeLoggedFilterSetTests):