diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index fccaa72f0..1fc7dc832 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -909,6 +909,10 @@ class DeviceFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilter queryset=Rack.objects.all(), label=_('Rack (ID)'), ) + has_position = django_filters.BooleanFilter( + label=_('Has a position'), + method='_has_position' + ) cluster_id = django_filters.ModelMultipleChoiceFilter( queryset=Cluster.objects.all(), label=_('VM cluster (ID)'), @@ -1050,6 +1054,9 @@ class DeviceFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilter def _device_bays(self, queryset, name, value): return queryset.exclude(devicebays__isnull=value) + def _has_position(self, queryset, name, value): + return queryset.exclude(position__isnull=value) + class VirtualDeviceContextFilterSet(NetBoxModelFilterSet, TenancyFilterSet): device_id = django_filters.ModelMultipleChoiceFilter( diff --git a/netbox/templates/dcim/rack.html b/netbox/templates/dcim/rack.html index 083bf77dc..2aed3da33 100644 --- a/netbox/templates/dcim/rack.html +++ b/netbox/templates/dcim/rack.html @@ -201,7 +201,7 @@ Non-Racked Devices