class SiteFilterSet( BaseFilterSet, TenancyFilterSet, StatusModelFilterSetMixin, CustomFieldModelFilterSet, CreatedUpdatedFilterSet, ): q = django_filters.CharFilter( method="search", label="Search", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) tag = TagFilter() class Meta: model = Site fields = [ "id", "name", "slug", "facility", "asn", "latitude", "longitude", "contact_name", "contact_phone", "contact_email", ] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = ( Q(name__icontains=value) | Q(facility__icontains=value) | Q(description__icontains=value) | Q(physical_address__icontains=value) | Q(shipping_address__icontains=value) | Q(contact_name__icontains=value) | Q(contact_phone__icontains=value) | Q(contact_email__icontains=value) | Q(comments__icontains=value) ) try: qs_filter |= Q(asn=int(value.strip())) except ValueError: pass return queryset.filter(qs_filter)
class PowerFeedFilterSet(NautobotFilterSet, CableTerminationFilterSet, PathEndpointFilterSet, StatusModelFilterSetMixin): q = django_filters.CharFilter( method="search", label="Search", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="power_panel__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="power_panel__site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( field_name="power_panel__site", queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="power_panel__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) power_panel_id = django_filters.ModelMultipleChoiceFilter( queryset=PowerPanel.objects.all(), label="Power panel (ID)", ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name="rack", queryset=Rack.objects.all(), label="Rack (ID)", ) tag = TagFilter() class Meta: model = PowerFeed fields = [ "id", "name", "status", "type", "supply", "phase", "voltage", "amperage", "max_utilization", ] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(name__icontains=value) | Q(comments__icontains=value) return queryset.filter(qs_filter)
class VLANGroupFilterSet( BaseFilterSet, NameSlugSearchFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet, ): region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) class Meta: model = VLANGroup fields = ["id", "name", "slug", "description"]
class ClusterFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) group_id = django_filters.ModelMultipleChoiceFilter( queryset=ClusterGroup.objects.all(), label="Parent group (ID)", ) group = django_filters.ModelMultipleChoiceFilter( field_name="group__slug", queryset=ClusterGroup.objects.all(), to_field_name="slug", label="Parent group (slug)", ) type_id = django_filters.ModelMultipleChoiceFilter( queryset=ClusterType.objects.all(), label="Cluster type (ID)", ) type = django_filters.ModelMultipleChoiceFilter( field_name="type__slug", queryset=ClusterType.objects.all(), to_field_name="slug", label="Cluster type (slug)", ) tag = TagFilter() class Meta: model = Cluster fields = ["id", "name"] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(comments__icontains=value))
class TenancyFilterSet(django_filters.FilterSet): """ An inheritable FilterSet for models which support Tenant assignment. """ tenant_group_id = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name="tenant__group", lookup_expr="in", label="Tenant Group (ID)", ) tenant_group = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name="tenant__group", to_field_name="slug", lookup_expr="in", label="Tenant Group (slug)", ) tenant_id = django_filters.ModelMultipleChoiceFilter( queryset=Tenant.objects.all(), label="Tenant (ID)", ) tenant = django_filters.ModelMultipleChoiceFilter( queryset=Tenant.objects.all(), field_name="tenant__slug", to_field_name="slug", label="Tenant (slug)", )
class TenantFilterSet(BaseFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) group_id = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name="group", lookup_expr="in", label="Tenant group (ID)", ) group = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name="group", lookup_expr="in", to_field_name="slug", label="Tenant group (slug)", ) tag = TagFilter() class Meta: model = Tenant fields = ["id", "name", "slug"] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(slug__icontains=value) | Q(description__icontains=value) | Q(comments__icontains=value))
class TenantFilterSet(NautobotFilterSet): q = SearchFilter(filter_predicates={ "name": "icontains", "slug": "icontains", "description": "icontains", "comments": "icontains", }, ) group_id = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name="group", lookup_expr="in", label="Tenant group (ID)", ) group = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name="group", lookup_expr="in", to_field_name="slug", label="Tenant group (slug)", ) tag = TagFilter() class Meta: model = Tenant fields = ["id", "name", "slug"]
class VLANFilterSet(NautobotFilterSet, TenancyFilterSet, StatusModelFilterSetMixin): q = SearchFilter( filter_predicates={ "name": "icontains", "description": "icontains", "vid": { "lookup_expr": "exact", "preprocessor": int, # vid expects an int }, }, ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) group_id = django_filters.ModelMultipleChoiceFilter( queryset=VLANGroup.objects.all(), label="Group (ID)", ) group = django_filters.ModelMultipleChoiceFilter( field_name="group__slug", queryset=VLANGroup.objects.all(), to_field_name="slug", label="Group", ) role_id = django_filters.ModelMultipleChoiceFilter( queryset=Role.objects.all(), label="Role (ID)", ) role = django_filters.ModelMultipleChoiceFilter( field_name="role__slug", queryset=Role.objects.all(), to_field_name="slug", label="Role (slug)", ) tag = TagFilter() class Meta: model = VLAN fields = ["id", "vid", "name"]
class VirtualChassisFilterSet(NautobotFilterSet): q = SearchFilter( filter_predicates={ "name": "icontains", "members__name": "icontains", "domain": "icontains", }, ) master_id = django_filters.ModelMultipleChoiceFilter( queryset=Device.objects.all(), label="Master (ID)", ) master = django_filters.ModelMultipleChoiceFilter( field_name="master__name", queryset=Device.objects.all(), to_field_name="name", label="Master (name)", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="master__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="master__site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( field_name="master__site", queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="master__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) tenant_id = django_filters.ModelMultipleChoiceFilter( field_name="master__tenant", queryset=Tenant.objects.all(), label="Tenant (ID)", ) tenant = django_filters.ModelMultipleChoiceFilter( field_name="master__tenant__slug", queryset=Tenant.objects.all(), to_field_name="slug", label="Tenant (slug)", ) tag = TagFilter() class Meta: model = VirtualChassis fields = ["id", "domain", "name"]
class RackReservationFilterSet(BaseFilterSet, CreatedUpdatedFilterSet, CustomFieldModelFilterSet, TenancyFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) rack_id = django_filters.ModelMultipleChoiceFilter( queryset=Rack.objects.all(), label="Rack (ID)", ) site_id = django_filters.ModelMultipleChoiceFilter( field_name="rack__site", queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="rack__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="rack__group", lookup_expr="in", label="Rack group (ID)", ) group = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="rack__group", lookup_expr="in", to_field_name="slug", label="Rack group (slug)", ) user_id = django_filters.ModelMultipleChoiceFilter( queryset=get_user_model().objects.all(), label="User (ID)", ) user = django_filters.ModelMultipleChoiceFilter( field_name="user__username", queryset=get_user_model().objects.all(), to_field_name="username", label="User (name)", ) tag = TagFilter() class Meta: model = RackReservation fields = ["id", "created"] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(rack__name__icontains=value) | Q(rack__facility_id__icontains=value) | Q(user__username__icontains=value) | Q(description__icontains=value))
class ClusterFilterSet(NautobotFilterSet, TenancyFilterSet): q = SearchFilter(filter_predicates={ "name": "icontains", "comments": "icontains", }, ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) group_id = django_filters.ModelMultipleChoiceFilter( queryset=ClusterGroup.objects.all(), label="Parent group (ID)", ) group = django_filters.ModelMultipleChoiceFilter( field_name="group__slug", queryset=ClusterGroup.objects.all(), to_field_name="slug", label="Parent group (slug)", ) type_id = django_filters.ModelMultipleChoiceFilter( queryset=ClusterType.objects.all(), label="Cluster type (ID)", ) type = django_filters.ModelMultipleChoiceFilter( field_name="type__slug", queryset=ClusterType.objects.all(), to_field_name="slug", label="Cluster type (slug)", ) tag = TagFilter() class Meta: model = Cluster fields = ["id", "name"]
class PowerFeedFilterSet( NautobotFilterSet, CableTerminationFilterSet, PathEndpointFilterSet, StatusModelFilterSetMixin ): q = SearchFilter(filter_predicates={"name": "icontains", "comments": "icontains"}) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="power_panel__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="power_panel__site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( field_name="power_panel__site", queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="power_panel__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) power_panel_id = django_filters.ModelMultipleChoiceFilter( queryset=PowerPanel.objects.all(), label="Power panel (ID)", ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name="rack", queryset=Rack.objects.all(), label="Rack (ID)", ) tag = TagFilter() class Meta: model = PowerFeed fields = [ "id", "name", "status", "type", "supply", "phase", "voltage", "amperage", "max_utilization", ]
class RackReservationFilterSet(NautobotFilterSet, TenancyFilterSet): q = SearchFilter( filter_predicates={ "rack__name": "icontains", "rack__facility_id": "icontains", "user__username": "******", "description": "icontains", }, ) rack_id = django_filters.ModelMultipleChoiceFilter( queryset=Rack.objects.all(), label="Rack (ID)", ) site_id = django_filters.ModelMultipleChoiceFilter( field_name="rack__site", queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="rack__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="rack__group", lookup_expr="in", label="Rack group (ID)", ) group = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="rack__group", lookup_expr="in", to_field_name="slug", label="Rack group (slug)", ) user_id = django_filters.ModelMultipleChoiceFilter( queryset=get_user_model().objects.all(), label="User (ID)", ) user = django_filters.ModelMultipleChoiceFilter( field_name="user__username", queryset=get_user_model().objects.all(), to_field_name="username", label="User (name)", ) tag = TagFilter() class Meta: model = RackReservation fields = ["id", "created"]
class SiteFilterSet(django_filters.FilterSet): region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="region", lookup_expr="in", to_field_name="slug", )
class SiteFilterSet(NautobotFilterSet, TenancyFilterSet, StatusModelFilterSetMixin): q = SearchFilter( filter_predicates={ "name": "icontains", "facility": "icontains", "description": "icontains", "physical_address": "icontains", "shipping_address": "icontains", "contact_name": "icontains", "contact_phone": "icontains", "contact_email": "icontains", "comments": "icontains", "asn": { "lookup_expr": "exact", "preprocessor": int, # asn expects an int }, }, ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) tag = TagFilter() class Meta: model = Site fields = [ "id", "name", "slug", "facility", "asn", "latitude", "longitude", "contact_name", "contact_phone", "contact_email", ]
class DeviceComponentFilterSet(CustomFieldModelFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="device__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="device__site__region", lookup_expr="in", to_field_name="slug", label="Region (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", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) device_id = django_filters.ModelMultipleChoiceFilter( queryset=Device.objects.all(), label="Device (ID)", ) device = django_filters.ModelMultipleChoiceFilter( field_name="device__name", queryset=Device.objects.all(), to_field_name="name", label="Device (name)", ) tag = TagFilter() def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(label__icontains=value) | Q(description__icontains=value))
class PowerPanelFilterSet(BaseFilterSet, CreatedUpdatedFilterSet, CustomFieldModelFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) rack_group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="rack_group", lookup_expr="in", label="Rack group (ID)", ) tag = TagFilter() class Meta: model = PowerPanel fields = ["id", "name"] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(name__icontains=value) return queryset.filter(qs_filter)
class ProviderFilterSet(BaseFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="circuits__terminations__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="circuits__terminations__site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( field_name="circuits__terminations__site", queryset=Site.objects.all(), label="Site", ) site = django_filters.ModelMultipleChoiceFilter( field_name="circuits__terminations__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) tag = TagFilter() class Meta: model = Provider fields = ["id", "name", "slug", "asn", "account"] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(account__icontains=value) | Q(noc_contact__icontains=value) | Q(admin_contact__icontains=value) | Q(comments__icontains=value) )
class DeviceComponentFilterSet(CustomFieldModelFilterSet): q = SearchFilter( filter_predicates={ "name": "icontains", "label": "icontains", "description": "icontains", }, ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="device__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="device__site__region", lookup_expr="in", to_field_name="slug", label="Region (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", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) device_id = django_filters.ModelMultipleChoiceFilter( queryset=Device.objects.all(), label="Device (ID)", ) device = django_filters.ModelMultipleChoiceFilter( field_name="device__name", queryset=Device.objects.all(), to_field_name="name", label="Device (name)", ) tag = TagFilter()
class RackGroupFilterSet(NautobotFilterSet, NameSlugSearchFilterSet): region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) parent_id = django_filters.ModelMultipleChoiceFilter( queryset=RackGroup.objects.all(), label="Rack group (ID)", ) parent = django_filters.ModelMultipleChoiceFilter( field_name="parent__slug", queryset=RackGroup.objects.all(), to_field_name="slug", label="Rack group (slug)", ) class Meta: model = RackGroup fields = ["id", "name", "slug", "description"]
class PowerPanelFilterSet(NautobotFilterSet): q = SearchFilter(filter_predicates={"name": "icontains"}) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) rack_group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="rack_group", lookup_expr="in", label="Rack group (ID)", ) tag = TagFilter() class Meta: model = PowerPanel fields = ["id", "name"]
class TestFilterSet(BaseFilterSet): charfield = django_filters.CharFilter() macaddressfield = MACAddressFilter() modelchoicefield = django_filters.ModelChoiceFilter( field_name= "integerfield", # We're pretending this is a ForeignKey field queryset=Site.objects.all(), ) modelmultiplechoicefield = django_filters.ModelMultipleChoiceFilter( field_name= "integerfield", # We're pretending this is a ForeignKey field queryset=Site.objects.all(), ) multiplechoicefield = django_filters.MultipleChoiceFilter( field_name="choicefield") multivaluecharfield = MultiValueCharFilter(field_name="charfield") tagfield = TagFilter() treeforeignkeyfield = TreeNodeMultipleChoiceFilter( queryset=TestModel.objects.all()) class Meta: model = TestModel fields = ( "charfield", "choicefield", "datefield", "datetimefield", "integerfield", "macaddressfield", "modelchoicefield", "modelmultiplechoicefield", "multiplechoicefield", "tagfield", "textfield", "timefield", "treeforeignkeyfield", )
class DeviceFilterSet(NautobotFilterSet, TenancyFilterSet, LocalContextFilterSet, StatusModelFilterSetMixin): q = SearchFilter( filter_predicates={ "name": "icontains", "serial": { "lookup_expr": "icontains", "preprocessor": str.strip, }, "inventoryitems__serial": { "lookup_expr": "icontains", "preprocessor": str.strip, }, "asset_tag": { "lookup_expr": "icontains", "preprocessor": str.strip, }, "comments": "icontains", }, ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( field_name="device_type__manufacturer", queryset=Manufacturer.objects.all(), label="Manufacturer (ID)", ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_name="device_type__manufacturer__slug", queryset=Manufacturer.objects.all(), to_field_name="slug", label="Manufacturer (slug)", ) device_type_id = django_filters.ModelMultipleChoiceFilter( queryset=DeviceType.objects.all(), label="Device type (ID)", ) role_id = django_filters.ModelMultipleChoiceFilter( field_name="device_role_id", queryset=DeviceRole.objects.all(), label="Role (ID)", ) role = django_filters.ModelMultipleChoiceFilter( field_name="device_role__slug", queryset=DeviceRole.objects.all(), to_field_name="slug", label="Role (slug)", ) platform_id = django_filters.ModelMultipleChoiceFilter( queryset=Platform.objects.all(), label="Platform (ID)", ) platform = django_filters.ModelMultipleChoiceFilter( field_name="platform__slug", queryset=Platform.objects.all(), to_field_name="slug", label="Platform (slug)", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) rack_group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="rack__group", lookup_expr="in", label="Rack group (ID)", ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name="rack", queryset=Rack.objects.all(), label="Rack (ID)", ) cluster_id = django_filters.ModelMultipleChoiceFilter( queryset=Cluster.objects.all(), label="VM cluster (ID)", ) model = django_filters.ModelMultipleChoiceFilter( field_name="device_type__slug", queryset=DeviceType.objects.all(), to_field_name="slug", label="Device model (slug)", ) is_full_depth = django_filters.BooleanFilter( field_name="device_type__is_full_depth", label="Is full depth", ) mac_address = MultiValueMACAddressFilter( field_name="interfaces__mac_address", label="MAC address", ) serial = django_filters.CharFilter(lookup_expr="iexact") has_primary_ip = django_filters.BooleanFilter( method="_has_primary_ip", label="Has a primary IP", ) secrets_group_id = django_filters.ModelMultipleChoiceFilter( field_name="secrets_group", queryset=SecretsGroup.objects.all(), label="Secrets group (ID)", ) secrets_group = django_filters.ModelMultipleChoiceFilter( field_name="secrets_group__slug", queryset=SecretsGroup.objects.all(), to_field_name="slug", label="Secrets group (slug)", ) virtual_chassis_id = django_filters.ModelMultipleChoiceFilter( field_name="virtual_chassis", queryset=VirtualChassis.objects.all(), label="Virtual chassis (ID)", ) is_virtual_chassis_member = RelatedMembershipBooleanFilter( field_name="virtual_chassis", label="Is a virtual chassis member", ) virtual_chassis_member = is_virtual_chassis_member has_console_ports = RelatedMembershipBooleanFilter( field_name="consoleports", label="Has console ports", ) console_ports = has_console_ports has_console_server_ports = RelatedMembershipBooleanFilter( field_name="consoleserverports", label="Has console server ports", ) console_server_ports = has_console_server_ports has_power_ports = RelatedMembershipBooleanFilter( field_name="powerports", label="Has power ports", ) power_ports = has_power_ports has_power_outlets = RelatedMembershipBooleanFilter( field_name="poweroutlets", label="Has power outlets", ) power_outlets = has_power_outlets has_interfaces = RelatedMembershipBooleanFilter( field_name="interfaces", label="Has interfaces", ) interfaces = has_interfaces pass_through_ports = django_filters.BooleanFilter( method="_pass_through_ports", label="Has pass-through ports", ) has_front_ports = RelatedMembershipBooleanFilter( field_name="frontports", label="Has front ports", ) has_rear_ports = RelatedMembershipBooleanFilter( field_name="rearports", label="Has rear ports", ) has_device_bays = RelatedMembershipBooleanFilter( field_name="devicebays", label="Has device bays", ) device_bays = has_device_bays tag = TagFilter() class Meta: model = Device fields = [ "id", "name", "asset_tag", "face", "position", "vc_position", "vc_priority", ] def _has_primary_ip(self, queryset, name, value): params = Q(primary_ip4__isnull=False) | Q(primary_ip6__isnull=False) if value: return queryset.filter(params) return queryset.exclude(params) # 2.0 TODO: Remove me and `pass_through_ports` in exchange for `has_(front|rear)_ports`. def _pass_through_ports(self, queryset, name, value): return queryset.exclude(frontports__isnull=value, rearports__isnull=value)
class DeviceFilterSet( BaseFilterSet, TenancyFilterSet, LocalContextFilterSet, StatusModelFilterSetMixin, CustomFieldModelFilterSet, CreatedUpdatedFilterSet, ): q = django_filters.CharFilter( method="search", label="Search", ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( field_name="device_type__manufacturer", queryset=Manufacturer.objects.all(), label="Manufacturer (ID)", ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_name="device_type__manufacturer__slug", queryset=Manufacturer.objects.all(), to_field_name="slug", label="Manufacturer (slug)", ) device_type_id = django_filters.ModelMultipleChoiceFilter( queryset=DeviceType.objects.all(), label="Device type (ID)", ) role_id = django_filters.ModelMultipleChoiceFilter( field_name="device_role_id", queryset=DeviceRole.objects.all(), label="Role (ID)", ) role = django_filters.ModelMultipleChoiceFilter( field_name="device_role__slug", queryset=DeviceRole.objects.all(), to_field_name="slug", label="Role (slug)", ) platform_id = django_filters.ModelMultipleChoiceFilter( queryset=Platform.objects.all(), label="Platform (ID)", ) platform = django_filters.ModelMultipleChoiceFilter( field_name="platform__slug", queryset=Platform.objects.all(), to_field_name="slug", label="Platform (slug)", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) rack_group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="rack__group", lookup_expr="in", label="Rack group (ID)", ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name="rack", queryset=Rack.objects.all(), label="Rack (ID)", ) cluster_id = django_filters.ModelMultipleChoiceFilter( queryset=Cluster.objects.all(), label="VM cluster (ID)", ) model = django_filters.ModelMultipleChoiceFilter( field_name="device_type__slug", queryset=DeviceType.objects.all(), to_field_name="slug", label="Device model (slug)", ) is_full_depth = django_filters.BooleanFilter( field_name="device_type__is_full_depth", label="Is full depth", ) mac_address = MultiValueMACAddressFilter( field_name="interfaces__mac_address", label="MAC address", ) serial = django_filters.CharFilter(lookup_expr="iexact") has_primary_ip = django_filters.BooleanFilter( method="_has_primary_ip", label="Has a primary IP", ) secrets_group_id = django_filters.ModelMultipleChoiceFilter( field_name="secrets_group", queryset=SecretsGroup.objects.all(), label="Secrets group (ID)", ) secrets_group = django_filters.ModelMultipleChoiceFilter( field_name="secrets_group__slug", queryset=SecretsGroup.objects.all(), to_field_name="slug", label="Secrets group (slug)", ) virtual_chassis_id = django_filters.ModelMultipleChoiceFilter( field_name="virtual_chassis", queryset=VirtualChassis.objects.all(), label="Virtual chassis (ID)", ) virtual_chassis_member = django_filters.BooleanFilter( method="_virtual_chassis_member", label="Is a virtual chassis member") console_ports = django_filters.BooleanFilter( method="_console_ports", label="Has console ports", ) console_server_ports = django_filters.BooleanFilter( method="_console_server_ports", label="Has console server ports", ) power_ports = django_filters.BooleanFilter( method="_power_ports", label="Has power ports", ) power_outlets = django_filters.BooleanFilter( method="_power_outlets", label="Has power outlets", ) interfaces = django_filters.BooleanFilter( method="_interfaces", label="Has interfaces", ) pass_through_ports = django_filters.BooleanFilter( method="_pass_through_ports", label="Has pass-through ports", ) device_bays = django_filters.BooleanFilter( method="_device_bays", label="Has device bays", ) tag = TagFilter() class Meta: model = Device fields = [ "id", "name", "asset_tag", "face", "position", "vc_position", "vc_priority", ] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(serial__icontains=value.strip()) | Q(inventoryitems__serial__icontains=value.strip()) | Q(asset_tag__icontains=value.strip()) | Q(comments__icontains=value)).distinct() def _has_primary_ip(self, queryset, name, value): params = Q(primary_ip4__isnull=False) | Q(primary_ip6__isnull=False) if value: return queryset.filter(params) return queryset.exclude(params) def _virtual_chassis_member(self, queryset, name, value): return queryset.exclude(virtual_chassis__isnull=value) def _console_ports(self, queryset, name, value): return queryset.exclude(consoleports__isnull=value) def _console_server_ports(self, queryset, name, value): return queryset.exclude(consoleserverports__isnull=value) def _power_ports(self, queryset, name, value): return queryset.exclude(powerports__isnull=value) def _power_outlets(self, queryset, name, value): return queryset.exclude(poweroutlets__isnull=value) def _interfaces(self, queryset, name, value): return queryset.exclude(interfaces__isnull=value) def _pass_through_ports(self, queryset, name, value): return queryset.exclude(frontports__isnull=value, rearports__isnull=value) def _device_bays(self, queryset, name, value): return queryset.exclude(devicebays__isnull=value)
class RackFilterSet(NautobotFilterSet, TenancyFilterSet, StatusModelFilterSetMixin): q = SearchFilter( filter_predicates={ "name": "icontains", "facility_id": "icontains", "serial": { "lookup_expr": "icontains", "preprocessor": str.strip, }, "asset_tag": { "lookup_expr": "icontains", "preprocessor": str.strip, }, "comments": "icontains", }, ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="group", lookup_expr="in", label="Rack group (ID)", ) group = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="group", lookup_expr="in", to_field_name="slug", label="Rack group (slug)", ) type = django_filters.MultipleChoiceFilter(choices=RackTypeChoices) width = django_filters.MultipleChoiceFilter(choices=RackWidthChoices) role_id = django_filters.ModelMultipleChoiceFilter( queryset=RackRole.objects.all(), label="Role (ID)", ) role = django_filters.ModelMultipleChoiceFilter( field_name="role__slug", queryset=RackRole.objects.all(), to_field_name="slug", label="Role (slug)", ) serial = django_filters.CharFilter(lookup_expr="iexact") tag = TagFilter() class Meta: model = Rack fields = [ "id", "name", "facility_id", "asset_tag", "u_height", "desc_units", "outer_width", "outer_depth", "outer_unit", ]
class VirtualChassisFilterSet(BaseFilterSet, CreatedUpdatedFilterSet, CustomFieldModelFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) master_id = django_filters.ModelMultipleChoiceFilter( queryset=Device.objects.all(), label="Master (ID)", ) master = django_filters.ModelMultipleChoiceFilter( field_name="master__name", queryset=Device.objects.all(), to_field_name="name", label="Master (name)", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="master__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="master__site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( field_name="master__site", queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="master__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) tenant_id = django_filters.ModelMultipleChoiceFilter( field_name="master__tenant", queryset=Tenant.objects.all(), label="Tenant (ID)", ) tenant = django_filters.ModelMultipleChoiceFilter( field_name="master__tenant__slug", queryset=Tenant.objects.all(), to_field_name="slug", label="Tenant (slug)", ) tag = TagFilter() class Meta: model = VirtualChassis fields = ["id", "domain", "name"] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(name__icontains=value) | Q( members__name__icontains=value) | Q(domain__icontains=value) return queryset.filter(qs_filter)
class GoldenConfigFilter(CreatedUpdatedFilterSet): """Filter capabilities for GoldenConfig instances.""" q = django_filters.CharFilter( method="search", label="Search", ) tenant_group_id = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name="device__tenant__group", lookup_expr="in", label="Tenant Group (ID)", ) tenant_group = TreeNodeMultipleChoiceFilter( queryset=TenantGroup.objects.all(), field_name="device__tenant__group", to_field_name="slug", lookup_expr="in", label="Tenant Group (slug)", ) tenant_id = django_filters.ModelMultipleChoiceFilter( queryset=Tenant.objects.all(), field_name="device__tenant_id", label="Tenant (ID)", ) tenant = django_filters.ModelMultipleChoiceFilter( queryset=Tenant.objects.all(), field_name="device__tenant__slug", to_field_name="slug", label="Tenant (slug)", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="device__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="device__site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="device__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) rack_group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="device__rack__group", lookup_expr="in", label="Rack group (ID)", ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name="device__rack", queryset=Rack.objects.all(), label="Rack (ID)", ) role_id = django_filters.ModelMultipleChoiceFilter( field_name="device__device_role_id", queryset=DeviceRole.objects.all(), label="Role (ID)", ) role = django_filters.ModelMultipleChoiceFilter( field_name="device__device_role__slug", queryset=DeviceRole.objects.all(), to_field_name="slug", label="Role (slug)", ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( field_name="device__device_type__manufacturer", queryset=Manufacturer.objects.all(), label="Manufacturer (ID)", ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_name="device__device_type__manufacturer__slug", queryset=Manufacturer.objects.all(), to_field_name="slug", label="Manufacturer (slug)", ) platform_id = django_filters.ModelMultipleChoiceFilter( queryset=Platform.objects.all(), label="Platform (ID)", ) platform = django_filters.ModelMultipleChoiceFilter( field_name="device__platform__slug", queryset=Platform.objects.all(), to_field_name="slug", label="Platform (slug)", ) device_status_id = StatusFilter( field_name="device__status", queryset=Status.objects.all(), label="Device Status", ) device_type_id = django_filters.ModelMultipleChoiceFilter( field_name="device__device_type_id", queryset=DeviceType.objects.all(), label="Device type (ID)", ) device_id = django_filters.ModelMultipleChoiceFilter( field_name="device", queryset=Device.objects.all(), label="Device Name", ) device = django_filters.ModelMultipleChoiceFilter( field_name="device__name", queryset=Device.objects.all(), label="Device Name", ) def search(self, queryset, name, value): # pylint: disable=unused-argument,no-self-use """Perform the filtered search.""" if not value.strip(): return queryset # Chose only device, can be convinced more should be included qs_filter = Q(device__name__icontains=value) return queryset.filter(qs_filter) class Meta: """Meta class attributes for GoldenConfig.""" model = models.GoldenConfig distinct = True fields = [ "q", "tenant_group_id", "tenant_group", "tenant_id", "tenant", "region_id", "region", "site_id", "site", "rack_group_id", "rack_id", "role_id", "role", "manufacturer_id", "manufacturer", "platform_id", "platform", "device_status_id", "device_type_id", "device_id", "device", ]
class VirtualMachineFilterSet( BaseFilterSet, LocalConfigContextFilterSet, TenancyFilterSet, StatusModelFilterSetMixin, CustomFieldModelFilterSet, CreatedUpdatedFilterSet, ): q = django_filters.CharFilter( method="search", label="Search", ) cluster_group_id = django_filters.ModelMultipleChoiceFilter( field_name="cluster__group", queryset=ClusterGroup.objects.all(), label="Cluster group (ID)", ) cluster_group = django_filters.ModelMultipleChoiceFilter( field_name="cluster__group__slug", queryset=ClusterGroup.objects.all(), to_field_name="slug", label="Cluster group (slug)", ) cluster_type_id = django_filters.ModelMultipleChoiceFilter( field_name="cluster__type", queryset=ClusterType.objects.all(), label="Cluster type (ID)", ) cluster_type = django_filters.ModelMultipleChoiceFilter( field_name="cluster__type__slug", queryset=ClusterType.objects.all(), to_field_name="slug", label="Cluster type (slug)", ) cluster_id = django_filters.ModelMultipleChoiceFilter( queryset=Cluster.objects.all(), label="Cluster (ID)", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="cluster__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="cluster__site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( field_name="cluster__site", queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="cluster__site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) role_id = django_filters.ModelMultipleChoiceFilter( queryset=DeviceRole.objects.all(), label="Role (ID)", ) role = django_filters.ModelMultipleChoiceFilter( field_name="role__slug", queryset=DeviceRole.objects.all(), to_field_name="slug", label="Role (slug)", ) platform_id = django_filters.ModelMultipleChoiceFilter( queryset=Platform.objects.all(), label="Platform (ID)", ) platform = django_filters.ModelMultipleChoiceFilter( field_name="platform__slug", queryset=Platform.objects.all(), to_field_name="slug", label="Platform (slug)", ) mac_address = MultiValueMACAddressFilter( field_name="interfaces__mac_address", label="MAC address", ) has_primary_ip = django_filters.BooleanFilter( method="_has_primary_ip", label="Has a primary IP", ) tag = TagFilter() class Meta: model = VirtualMachine fields = ["id", "name", "cluster", "vcpus", "memory", "disk"] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(comments__icontains=value)) def _has_primary_ip(self, queryset, name, value): params = Q(primary_ip4__isnull=False) | Q(primary_ip6__isnull=False) if value: return queryset.filter(params) return queryset.exclude(params)
class InventoryItemFilterSet(BaseFilterSet, DeviceComponentFilterSet): q = SearchFilter( filter_predicates={ "name": "icontains", "part_id": "icontains", "serial": { "lookup_expr": "icontains", "preprocessor": str.strip, }, "asset_tag": { "lookup_expr": "icontains", "preprocessor": str.strip, }, "description": "icontains", }, ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="device__site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="device__site__region", lookup_expr="in", to_field_name="slug", label="Region (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", queryset=Site.objects.all(), to_field_name="slug", label="Site name (slug)", ) device_id = django_filters.ModelChoiceFilter( queryset=Device.objects.all(), label="Device (ID)", ) device = django_filters.ModelChoiceFilter( queryset=Device.objects.all(), to_field_name="name", label="Device (name)", ) parent_id = django_filters.ModelMultipleChoiceFilter( queryset=InventoryItem.objects.all(), label="Parent inventory item (ID)", ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( queryset=Manufacturer.objects.all(), label="Manufacturer (ID)", ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_name="manufacturer__slug", queryset=Manufacturer.objects.all(), to_field_name="slug", label="Manufacturer (slug)", ) serial = django_filters.CharFilter(lookup_expr="iexact") class Meta: model = InventoryItem fields = ["id", "name", "part_id", "asset_tag", "discovered"]
class RackFilterSet( BaseFilterSet, TenancyFilterSet, StatusModelFilterSetMixin, CustomFieldModelFilterSet, CreatedUpdatedFilterSet, ): q = django_filters.CharFilter( method="search", label="Search", ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", label="Region (ID)", ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), field_name="site__region", lookup_expr="in", to_field_name="slug", label="Region (slug)", ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), label="Site (ID)", ) site = django_filters.ModelMultipleChoiceFilter( field_name="site__slug", queryset=Site.objects.all(), to_field_name="slug", label="Site (slug)", ) group_id = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="group", lookup_expr="in", label="Rack group (ID)", ) group = TreeNodeMultipleChoiceFilter( queryset=RackGroup.objects.all(), field_name="group", lookup_expr="in", to_field_name="slug", label="Rack group (slug)", ) type = django_filters.MultipleChoiceFilter(choices=RackTypeChoices) width = django_filters.MultipleChoiceFilter(choices=RackWidthChoices) role_id = django_filters.ModelMultipleChoiceFilter( queryset=RackRole.objects.all(), label="Role (ID)", ) role = django_filters.ModelMultipleChoiceFilter( field_name="role__slug", queryset=RackRole.objects.all(), to_field_name="slug", label="Role (slug)", ) serial = django_filters.CharFilter(lookup_expr="iexact") tag = TagFilter() class Meta: model = Rack fields = [ "id", "name", "facility_id", "asset_tag", "u_height", "desc_units", "outer_width", "outer_depth", "outer_unit", ] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(facility_id__icontains=value) | Q(serial__icontains=value.strip()) | Q(asset_tag__icontains=value.strip()) | Q(comments__icontains=value))