diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index f9f0a57d6..5ed02a529 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -128,6 +128,12 @@ class RackFilter(TenancyFilterSet, CustomFieldFilterSet): queryset=Site.objects.all(), label='Site (ID)', ) + rack = django_filters.ModelMultipleChoiceFilter( + field_name='name', + queryset=Rack.objects.all(), + to_field_name='name', + label='Rack (name)', + ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', queryset=Site.objects.all(), diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index f10418d57..748809320 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -590,11 +590,19 @@ class RackBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditFor class RackFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm): model = Rack - field_order = ['q', 'site', 'group_id', 'status', 'role', 'tenant_group', 'tenant'] + field_order = ['q', 'rack', 'site', 'group_id', 'status', 'role', 'tenant_group', 'tenant'] q = forms.CharField( required=False, label='Search' ) + rack = FilterChoiceField( + queryset=Rack.objects.all(), + to_field_name='name', + widget=APISelectMultiple( + api_url="/api/dcim/racks/", + value_field="name", + ) + ) site = FilterChoiceField( queryset=Site.objects.all(), to_field_name='slug',