From 1266a2f753cb3f1c5a31af0a6e33572fc234d1db Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 12 Apr 2022 10:07:31 -0400 Subject: [PATCH] Fixes #9116: assigned_to_interface filter for IP addresses should not match FHRP group assignments --- docs/release-notes/version-3.2.md | 1 + netbox/ipam/filtersets.py | 12 +++++++++++- netbox/ipam/tests/test_filtersets.py | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/release-notes/version-3.2.md b/docs/release-notes/version-3.2.md index 171783e36..a7cccf946 100644 --- a/docs/release-notes/version-3.2.md +++ b/docs/release-notes/version-3.2.md @@ -19,6 +19,7 @@ * [#9079](https://github.com/netbox-community/netbox/issues/9079) - Fail validation when an inventory item is assigned as its own parent * [#9096](https://github.com/netbox-community/netbox/issues/9096) - Remove duplicate filter tag when filtering by "none" * [#9100](https://github.com/netbox-community/netbox/issues/9100) - Include position field in module type YAML export +* [#9116](https://github.com/netbox-community/netbox/issues/9116) - `assigned_to_interface` filter for IP addresses should not match FHRP group assignments --- diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 977e70020..53c589bb3 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -618,7 +618,17 @@ class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet): ) def _assigned_to_interface(self, queryset, name, value): - return queryset.exclude(assigned_object_id__isnull=value) + content_types = ContentType.objects.get_for_models(Interface, VMInterface).values() + if value: + return queryset.filter( + assigned_object_type__in=content_types, + assigned_object_id__isnull=False + ) + else: + return queryset.exclude( + assigned_object_type__in=content_types, + assigned_object_id__isnull=False + ) class FHRPGroupFilterSet(NetBoxModelFilterSet): diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index 9bae84e3a..4bb72dce2 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -891,7 +891,7 @@ class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'assigned_to_interface': 'true'} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6) params = {'assigned_to_interface': 'false'} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6) def test_status(self): params = {'status': [PrefixStatusChoices.STATUS_DEPRECATED, PrefixStatusChoices.STATUS_RESERVED]}