From c1da23f0f642c0568a7c169219fbacf04bf23b6e Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Sun, 13 Apr 2025 14:50:00 +0200 Subject: [PATCH 1/2] feat(dcim): Add filter by location slug for Device Introduces a TreeNodeMultipleChoiceFilter for filtering locations by slug. Enhances filtering flexibility in the Device model by supporting both ID and slug lookups. Fixes #19056 --- netbox/dcim/filtersets.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index fcb3c7e5093..636a4b6be76 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -1057,6 +1057,13 @@ class DeviceFilterSet( lookup_expr='in', label=_('Location (ID)'), ) + location = TreeNodeMultipleChoiceFilter( + queryset=Location.objects.all(), + field_name='location', + lookup_expr='in', + to_field_name='slug', + label=_('Location (slug)'), + ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name='rack', queryset=Rack.objects.all(), From 92dd3b0573ab758db3f97009099760c01946398c Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Sun, 13 Apr 2025 14:51:23 +0200 Subject: [PATCH 2/2] feat(dcim): Add Device filtering by location slug in tests Extend test cases to include filtering by location slug. Ensures the FilterSet works correctly with slug-based queries for locations. Fixes #19056 --- netbox/dcim/tests/test_filtersets.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index ede1e2a09d3..a938e14c0c5 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -2561,6 +2561,8 @@ def test_location(self): locations = Location.objects.all()[:2] params = {'location_id': [locations[0].pk, locations[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'location': [locations[0].slug, locations[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_rack(self): racks = Rack.objects.all()[:2]