diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index fcb3c7e50..636a4b6be 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(), diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index ede1e2a09..a938e14c0 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -2561,6 +2561,8 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): 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]