diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 4d5cf2e62..05e9615e7 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -733,6 +733,27 @@ class InterfaceFilter(django_filters.FilterSet): method='search', label='Search', ) + region_id = django_filters.ModelMultipleChoiceFilter( + field_name='device__site__region', + queryset=Region.objects.all(), + label='Region (ID)', + ) + region = django_filters.ModelMultipleChoiceFilter( + field_name='device__site__region__in', + queryset=Region.objects.all(), + label='Region name (slug)', + ) + site_id = django_filters.ModelMultipleChoiceFilter( + field_name='device__site', + queryset=Site.objects.all(), + label='Site (ID)', + ) + site = django_filters.ModelMultipleChoiceFilter( + field_name='device__site__slug', + to_field_name='slug', + queryset=Site.objects.all(), + label='Site name (slug)', + ) device = django_filters.CharFilter( method='filter_device', field_name='name', diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 2f36c9e47..98fdffe52 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -65,14 +65,14 @@ class DeviceComponentFilterForm(BootstrapMixin, forms.Form): required=False, label='Search' ) - region_id = TreeNodeChoiceField( + region = TreeNodeChoiceField( queryset=Region.objects.all(), required=False, widget=APISelect( api_url="/api/dcim/regions/" ) ) - site_id = forms.ModelChoiceField( + site = forms.ModelChoiceField( queryset=Site.objects.all(), to_field_name='slug', required=False,