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 CableFilterSet(StatusModelFilterSetMixin, BaseFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) type = django_filters.MultipleChoiceFilter(choices=CableTypeChoices) color = django_filters.MultipleChoiceFilter(choices=ColorChoices) device_id = MultiValueNumberFilter(method="filter_device") device = MultiValueCharFilter(method="filter_device", field_name="device__name") rack_id = MultiValueNumberFilter(method="filter_device", field_name="device__rack_id") rack = MultiValueNumberFilter(method="filter_device", field_name="device__rack__name") site_id = MultiValueNumberFilter(method="filter_device", field_name="device__site_id") site = MultiValueNumberFilter(method="filter_device", field_name="device__site__slug") tenant_id = MultiValueNumberFilter(method="filter_device", field_name="device__tenant_id") tenant = MultiValueNumberFilter(method="filter_device", field_name="device__tenant__slug") tag = TagFilter() class Meta: model = Cable fields = ["id", "label", "length", "length_unit"] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter(label__icontains=value) def filter_device(self, queryset, name, value): queryset = queryset.filter( Q(**{"_termination_a_{}__in".format(name): value}) | Q(**{"_termination_b_{}__in".format(name): value}) ) return queryset
class RouteTargetFilterSet(NautobotFilterSet, TenancyFilterSet): q = SearchFilter(filter_predicates={ "name": "icontains", "description": "icontains", }, ) importing_vrf_id = django_filters.ModelMultipleChoiceFilter( field_name="importing_vrfs", queryset=VRF.objects.all(), label="Importing VRF", ) importing_vrf = django_filters.ModelMultipleChoiceFilter( field_name="importing_vrfs__rd", queryset=VRF.objects.all(), to_field_name="rd", label="Import VRF (RD)", ) exporting_vrf_id = django_filters.ModelMultipleChoiceFilter( field_name="exporting_vrfs", queryset=VRF.objects.all(), label="Exporting VRF", ) exporting_vrf = django_filters.ModelMultipleChoiceFilter( field_name="exporting_vrfs__rd", queryset=VRF.objects.all(), to_field_name="rd", label="Export VRF (RD)", ) tag = TagFilter() class Meta: model = RouteTarget fields = ["id", "name"]
class VMInterfaceFilterSet(BaseFilterSet, CustomFieldModelFilterSet): q = SearchFilter(filter_predicates={"name": "icontains"}) cluster_id = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine__cluster", queryset=Cluster.objects.all(), label="Cluster (ID)", ) cluster = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine__cluster__name", queryset=Cluster.objects.all(), to_field_name="name", label="Cluster", ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine", queryset=VirtualMachine.objects.all(), label="Virtual machine (ID)", ) virtual_machine = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine__name", queryset=VirtualMachine.objects.all(), to_field_name="name", label="Virtual machine", ) mac_address = MultiValueMACAddressFilter(label="MAC address", ) tag = TagFilter() class Meta: model = VMInterface fields = ["id", "name", "enabled", "mtu"]
class GitRepositoryFilterSet(BaseFilterSet, CreatedUpdatedFilterSet, CustomFieldModelFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) 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)", ) tag = TagFilter() class Meta: model = GitRepository fields = ["id", "name", "slug", "remote_url", "branch"] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(name__icontains=value) | Q(remote_url__icontains=value) | Q(branch__icontains=value) try: qs_filter |= Q(asn=int(value.strip())) except ValueError: pass return queryset.filter(qs_filter)
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 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 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 ServiceFilterSet(NautobotFilterSet): q = SearchFilter(filter_predicates={ "name": "icontains", "description": "icontains", }, ) 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)", ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( queryset=VirtualMachine.objects.all(), label="Virtual machine (ID)", ) virtual_machine = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine__name", queryset=VirtualMachine.objects.all(), to_field_name="name", label="Virtual machine (name)", ) port = NumericArrayFilter(field_name="ports", lookup_expr="contains") tag = TagFilter() class Meta: model = Service fields = ["id", "name", "protocol"]
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 VRFFilterSet(NautobotFilterSet, TenancyFilterSet): q = SearchFilter(filter_predicates={ "name": "icontains", "rd": "icontains", "description": "icontains", }, ) import_target_id = django_filters.ModelMultipleChoiceFilter( field_name="import_targets", queryset=RouteTarget.objects.all(), label="Import target", ) import_target = django_filters.ModelMultipleChoiceFilter( field_name="import_targets__name", queryset=RouteTarget.objects.all(), to_field_name="name", label="Import target (name)", ) export_target_id = django_filters.ModelMultipleChoiceFilter( field_name="export_targets", queryset=RouteTarget.objects.all(), label="Export target", ) export_target = django_filters.ModelMultipleChoiceFilter( field_name="export_targets__name", queryset=RouteTarget.objects.all(), to_field_name="name", label="Export target (name)", ) tag = TagFilter() class Meta: model = VRF fields = ["id", "name", "rd", "enforce_unique"]
class AggregateFilterSet(NautobotFilterSet, IPAMFilterSetMixin, TenancyFilterSet): prefix = django_filters.CharFilter( method="filter_prefix", label="Prefix", ) rir_id = django_filters.ModelMultipleChoiceFilter( queryset=RIR.objects.all(), label="RIR (ID)", ) rir = django_filters.ModelMultipleChoiceFilter( field_name="rir__slug", queryset=RIR.objects.all(), to_field_name="slug", label="RIR (slug)", ) tag = TagFilter() class Meta: model = Aggregate fields = ["id", "date_added"] def filter_prefix(self, queryset, name, value): if not value.strip(): return queryset try: return queryset.net_equals(netaddr.IPNetwork(value)) except (AddrFormatError, ValueError): return queryset.none()
class ProviderNetworkFilterSet(NautobotFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) provider_id = django_filters.ModelMultipleChoiceFilter( queryset=Provider.objects.all(), label="Provider (ID)", ) provider = django_filters.ModelMultipleChoiceFilter( field_name="provider__slug", queryset=Provider.objects.all(), to_field_name="slug", label="Provider (slug)", ) tag = TagFilter() class Meta: model = ProviderNetwork fields = ["id", "name", "slug"] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(description__icontains=value) | Q(comments__icontains=value)).distinct()
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 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 AggregateFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) family = django_filters.NumberFilter( method="filter_ip_family", label="Family", ) prefix = django_filters.CharFilter( method="filter_prefix", label="Prefix", ) rir_id = django_filters.ModelMultipleChoiceFilter( queryset=RIR.objects.all(), label="RIR (ID)", ) rir = django_filters.ModelMultipleChoiceFilter( field_name="rir__slug", queryset=RIR.objects.all(), to_field_name="slug", label="RIR (slug)", ) tag = TagFilter() class Meta: model = Aggregate fields = ["id", "date_added"] def search(self, queryset, name, value): value = value.strip() if not value: return queryset return queryset.string_search(value) def filter_prefix(self, queryset, name, value): if not value.strip(): return queryset try: return queryset.net_equals(netaddr.IPNetwork(value)) except (AddrFormatError, ValueError): return queryset.none() def filter_ip_family(self, queryset, name, value): return queryset.ip_family(value)
class AggregateFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) family = django_filters.NumberFilter(field_name="prefix", lookup_expr="family") prefix = django_filters.CharFilter( method="filter_prefix", label="Prefix", ) rir_id = django_filters.ModelMultipleChoiceFilter( queryset=RIR.objects.all(), label="RIR (ID)", ) rir = django_filters.ModelMultipleChoiceFilter( field_name="rir__slug", queryset=RIR.objects.all(), to_field_name="slug", label="RIR (slug)", ) tag = TagFilter() class Meta: model = Aggregate fields = ["id", "date_added"] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(description__icontains=value) try: prefix = str(netaddr.IPNetwork(value.strip()).cidr) qs_filter |= Q(prefix__net_contains_or_equals=prefix) except (AddrFormatError, ValueError): pass return queryset.filter(qs_filter) def filter_prefix(self, queryset, name, value): if not value.strip(): return queryset try: query = str(netaddr.IPNetwork(value).cidr) return queryset.filter(prefix=query) except (AddrFormatError, ValueError): return queryset.none()
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 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 GitRepositoryFilterSet(BaseFilterSet, CreatedUpdatedFilterSet, CustomFieldFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) tag = TagFilter() class Meta: model = GitRepository fields = ["id", "name", "slug", "remote_url", "branch"] def search(self, queryset, name, value): if not value.strip(): return queryset qs_filter = Q(name__icontains=value) | Q(remote_url__icontains=value) | Q(branch__icontains=value) try: qs_filter |= Q(asn=int(value.strip())) except ValueError: pass return queryset.filter(qs_filter)
class VRFFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) import_target_id = django_filters.ModelMultipleChoiceFilter( field_name="import_targets", queryset=RouteTarget.objects.all(), label="Import target", ) import_target = django_filters.ModelMultipleChoiceFilter( field_name="import_targets__name", queryset=RouteTarget.objects.all(), to_field_name="name", label="Import target (name)", ) export_target_id = django_filters.ModelMultipleChoiceFilter( field_name="export_targets", queryset=RouteTarget.objects.all(), label="Export target", ) export_target = django_filters.ModelMultipleChoiceFilter( field_name="export_targets__name", queryset=RouteTarget.objects.all(), to_field_name="name", label="Export target (name)", ) tag = TagFilter() def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(rd__icontains=value) | Q(description__icontains=value)) class Meta: model = VRF fields = ["id", "name", "rd", "enforce_unique"]
class VMInterfaceFilterSet(BaseFilterSet, CustomFieldModelFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) cluster_id = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine__cluster", queryset=Cluster.objects.all(), label="Cluster (ID)", ) cluster = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine__cluster__name", queryset=Cluster.objects.all(), to_field_name="name", label="Cluster", ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine", queryset=VirtualMachine.objects.all(), label="Virtual machine (ID)", ) virtual_machine = django_filters.ModelMultipleChoiceFilter( field_name="virtual_machine__name", queryset=VirtualMachine.objects.all(), to_field_name="name", label="Virtual machine", ) mac_address = MultiValueMACAddressFilter( label="MAC address", ) tag = TagFilter() class Meta: model = VMInterface fields = ["id", "name", "enabled", "mtu"] def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter(Q(name__icontains=value))
class RouteTargetFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldModelFilterSet, CreatedUpdatedFilterSet): q = django_filters.CharFilter( method="search", label="Search", ) importing_vrf_id = django_filters.ModelMultipleChoiceFilter( field_name="importing_vrfs", queryset=VRF.objects.all(), label="Importing VRF", ) importing_vrf = django_filters.ModelMultipleChoiceFilter( field_name="importing_vrfs__rd", queryset=VRF.objects.all(), to_field_name="rd", label="Import VRF (RD)", ) exporting_vrf_id = django_filters.ModelMultipleChoiceFilter( field_name="exporting_vrfs", queryset=VRF.objects.all(), label="Exporting VRF", ) exporting_vrf = django_filters.ModelMultipleChoiceFilter( field_name="exporting_vrfs__rd", queryset=VRF.objects.all(), to_field_name="rd", label="Export VRF (RD)", ) tag = TagFilter() def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( Q(name__icontains=value) | Q(description__icontains=value)) class Meta: model = RouteTarget fields = ["id", "name"]