2016-03-01 11:23:03 -05:00
|
|
|
import django_filters
|
2017-06-19 16:10:18 -04:00
|
|
|
from django.contrib.auth.models import User
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2021-04-29 16:12:31 -04:00
|
|
|
from extras.filters import TagFilter
|
2021-04-29 15:59:11 -04:00
|
|
|
from extras.filtersets import LocalConfigContextFilterSet
|
2021-10-24 23:42:47 -05:00
|
|
|
from ipam.models import ASN
|
2021-04-29 16:53:48 -04:00
|
|
|
from netbox.filtersets import (
|
|
|
|
|
BaseFilterSet, ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet,
|
|
|
|
|
)
|
2021-04-29 16:38:56 -04:00
|
|
|
from tenancy.filtersets import TenancyFilterSet
|
2016-08-23 11:18:00 -04:00
|
|
|
from tenancy.models import Tenant
|
2020-05-26 09:36:27 -04:00
|
|
|
from utilities.choices import ColorChoices
|
2019-07-18 20:42:15 -04:00
|
|
|
from utilities.filters import (
|
2021-10-07 15:09:42 -04:00
|
|
|
ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, MultiValueWWNFilter,
|
2021-10-06 12:06:32 -04:00
|
|
|
TreeNodeMultipleChoiceFilter,
|
2019-07-18 20:42:15 -04:00
|
|
|
)
|
2017-08-21 16:53:36 -04:00
|
|
|
from virtualization.models import Cluster
|
2021-10-20 13:34:39 -04:00
|
|
|
from wireless.choices import WirelessRoleChoices, WirelessChannelChoices
|
2019-11-06 16:56:46 -05:00
|
|
|
from .choices import *
|
2018-11-01 16:03:42 -04:00
|
|
|
from .constants import *
|
2021-03-08 13:28:53 -05:00
|
|
|
from .models import *
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2020-01-08 17:20:31 -05:00
|
|
|
__all__ = (
|
2020-01-09 20:30:40 -05:00
|
|
|
'CableFilterSet',
|
2020-10-06 17:28:25 -04:00
|
|
|
'CableTerminationFilterSet',
|
2020-01-09 20:30:40 -05:00
|
|
|
'ConsoleConnectionFilterSet',
|
|
|
|
|
'ConsolePortFilterSet',
|
|
|
|
|
'ConsolePortTemplateFilterSet',
|
|
|
|
|
'ConsoleServerPortFilterSet',
|
|
|
|
|
'ConsoleServerPortTemplateFilterSet',
|
|
|
|
|
'DeviceBayFilterSet',
|
|
|
|
|
'DeviceBayTemplateFilterSet',
|
|
|
|
|
'DeviceFilterSet',
|
|
|
|
|
'DeviceRoleFilterSet',
|
|
|
|
|
'DeviceTypeFilterSet',
|
|
|
|
|
'FrontPortFilterSet',
|
|
|
|
|
'FrontPortTemplateFilterSet',
|
|
|
|
|
'InterfaceConnectionFilterSet',
|
|
|
|
|
'InterfaceFilterSet',
|
|
|
|
|
'InterfaceTemplateFilterSet',
|
|
|
|
|
'InventoryItemFilterSet',
|
2021-03-03 13:30:33 -05:00
|
|
|
'LocationFilterSet',
|
2020-01-09 20:30:40 -05:00
|
|
|
'ManufacturerFilterSet',
|
2020-10-06 17:28:25 -04:00
|
|
|
'PathEndpointFilterSet',
|
2020-01-09 20:30:40 -05:00
|
|
|
'PlatformFilterSet',
|
|
|
|
|
'PowerConnectionFilterSet',
|
|
|
|
|
'PowerFeedFilterSet',
|
|
|
|
|
'PowerOutletFilterSet',
|
|
|
|
|
'PowerOutletTemplateFilterSet',
|
|
|
|
|
'PowerPanelFilterSet',
|
|
|
|
|
'PowerPortFilterSet',
|
|
|
|
|
'PowerPortTemplateFilterSet',
|
|
|
|
|
'RackFilterSet',
|
|
|
|
|
'RackReservationFilterSet',
|
|
|
|
|
'RackRoleFilterSet',
|
|
|
|
|
'RearPortFilterSet',
|
|
|
|
|
'RearPortTemplateFilterSet',
|
|
|
|
|
'RegionFilterSet',
|
|
|
|
|
'SiteFilterSet',
|
2021-03-08 13:28:53 -05:00
|
|
|
'SiteGroupFilterSet',
|
2020-01-09 20:30:40 -05:00
|
|
|
'VirtualChassisFilterSet',
|
2020-01-08 17:20:31 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class RegionFilterSet(OrganizationalModelFilterSet):
|
2017-10-30 17:20:22 -04:00
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Parent region (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
parent = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='parent__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Parent region (slug)',
|
|
|
|
|
)
|
2021-10-21 15:29:52 -04:00
|
|
|
tag = TagFilter()
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Region
|
2020-03-13 16:24:37 -04:00
|
|
|
fields = ['id', 'name', 'slug', 'description']
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class SiteGroupFilterSet(OrganizationalModelFilterSet):
|
2021-03-08 13:28:53 -05:00
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
label='Parent site group (ID)',
|
|
|
|
|
)
|
|
|
|
|
parent = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='parent__slug',
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Parent site group (slug)',
|
|
|
|
|
)
|
2021-10-21 15:29:52 -04:00
|
|
|
tag = TagFilter()
|
2021-03-08 13:28:53 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = SiteGroup
|
|
|
|
|
fields = ['id', 'name', 'slug', 'description']
|
|
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class SiteFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
|
2017-03-01 13:09:19 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
2016-06-29 12:06:37 -04:00
|
|
|
label='Search',
|
|
|
|
|
)
|
2018-02-06 14:10:42 -05:00
|
|
|
status = django_filters.MultipleChoiceFilter(
|
2019-11-21 22:54:01 -05:00
|
|
|
choices=SiteStatusChoices,
|
2018-02-06 14:10:42 -05:00
|
|
|
null_value=None
|
|
|
|
|
)
|
2019-02-27 11:39:25 -06:00
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='region',
|
|
|
|
|
lookup_expr='in',
|
2017-02-28 16:10:53 -05:00
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
2019-02-27 11:39:25 -06:00
|
|
|
region = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
lookup_expr='in',
|
2019-02-27 11:39:25 -06:00
|
|
|
to_field_name='slug',
|
2017-02-28 16:10:53 -05:00
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2021-03-08 13:28:53 -05:00
|
|
|
group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Group (ID)',
|
|
|
|
|
)
|
|
|
|
|
group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Group (slug)',
|
|
|
|
|
)
|
2021-12-09 16:56:22 -05:00
|
|
|
asn = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='asns__asn',
|
|
|
|
|
queryset=ASN.objects.all(),
|
|
|
|
|
to_field_name='asn',
|
|
|
|
|
label='AS (ID)',
|
|
|
|
|
)
|
2021-11-04 16:22:55 -04:00
|
|
|
asn_id = django_filters.ModelMultipleChoiceFilter(
|
2021-10-24 23:42:47 -05:00
|
|
|
field_name='asns',
|
|
|
|
|
queryset=ASN.objects.all(),
|
|
|
|
|
label='AS (ID)',
|
|
|
|
|
)
|
2018-11-12 15:48:58 -05:00
|
|
|
tag = TagFilter()
|
2016-06-29 12:06:37 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Site
|
2021-12-09 16:20:24 -05:00
|
|
|
fields = (
|
2021-12-09 16:56:22 -05:00
|
|
|
'id', 'name', 'slug', 'facility', 'latitude', 'longitude',
|
2021-12-09 16:20:24 -05:00
|
|
|
)
|
2016-06-29 12:06:37 -04:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(name__icontains=value) |
|
|
|
|
|
Q(facility__icontains=value) |
|
2018-01-25 13:29:09 -05:00
|
|
|
Q(description__icontains=value) |
|
2017-03-01 13:09:19 -05:00
|
|
|
Q(physical_address__icontains=value) |
|
|
|
|
|
Q(shipping_address__icontains=value) |
|
|
|
|
|
Q(comments__icontains=value)
|
|
|
|
|
)
|
2016-06-29 12:06:37 -04:00
|
|
|
try:
|
2021-10-27 22:25:31 -05:00
|
|
|
qs_filter |= Q(asn=int(value.strip()))
|
2021-11-02 11:07:19 -05:00
|
|
|
qs_filter |= Q(asns__asn=int(value.strip()))
|
2016-06-29 12:06:37 -04:00
|
|
|
except ValueError:
|
|
|
|
|
pass
|
|
|
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
|
|
|
|
|
2021-11-03 16:58:31 -04:00
|
|
|
class LocationFilterSet(TenancyFilterSet, OrganizationalModelFilterSet):
|
2020-01-03 13:52:50 -05:00
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
|
|
|
|
region = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2021-03-08 13:28:53 -05:00
|
|
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Site group (ID)',
|
|
|
|
|
)
|
|
|
|
|
site_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site group (slug)',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='site__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
2021-04-11 13:42:24 -04:00
|
|
|
parent_id = TreeNodeMultipleChoiceFilter(
|
2021-03-03 13:30:33 -05:00
|
|
|
queryset=Location.objects.all(),
|
2021-04-11 13:42:24 -04:00
|
|
|
field_name='parent',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Location (ID)',
|
2020-03-11 14:40:29 -04:00
|
|
|
)
|
2021-04-11 13:42:24 -04:00
|
|
|
parent = TreeNodeMultipleChoiceFilter(
|
2021-03-03 13:30:33 -05:00
|
|
|
queryset=Location.objects.all(),
|
2021-04-11 13:42:24 -04:00
|
|
|
field_name='parent',
|
|
|
|
|
lookup_expr='in',
|
2020-03-11 14:40:29 -04:00
|
|
|
to_field_name='slug',
|
2021-04-11 13:42:24 -04:00
|
|
|
label='Location (slug)',
|
2020-03-11 14:40:29 -04:00
|
|
|
)
|
2021-10-21 15:29:52 -04:00
|
|
|
tag = TagFilter()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
2021-03-03 13:30:33 -05:00
|
|
|
model = Location
|
2020-03-13 16:24:37 -04:00
|
|
|
fields = ['id', 'name', 'slug', 'description']
|
2017-06-19 16:10:18 -04:00
|
|
|
|
2021-04-19 15:56:39 -04:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(name__icontains=value) |
|
|
|
|
|
Q(description__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
|
2017-06-19 16:10:18 -04:00
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class RackRoleFilterSet(OrganizationalModelFilterSet):
|
2021-10-21 15:29:52 -04:00
|
|
|
tag = TagFilter()
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = RackRole
|
2019-05-07 13:55:48 -04:00
|
|
|
fields = ['id', 'name', 'slug', 'color']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class RackFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
|
2017-03-01 13:09:19 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Search',
|
|
|
|
|
)
|
2020-01-03 13:52:50 -05:00
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
|
|
|
|
region = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2021-03-08 13:28:53 -05:00
|
|
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Site group (ID)',
|
|
|
|
|
)
|
|
|
|
|
site_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site group (slug)',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='site__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
2021-03-03 13:30:33 -05:00
|
|
|
location_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=Location.objects.all(),
|
|
|
|
|
field_name='location',
|
2020-03-11 14:57:48 -04:00
|
|
|
lookup_expr='in',
|
2021-03-03 13:30:33 -05:00
|
|
|
label='Location (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2021-03-03 13:30:33 -05:00
|
|
|
location = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=Location.objects.all(),
|
|
|
|
|
field_name='location',
|
2020-03-11 14:57:48 -04:00
|
|
|
lookup_expr='in',
|
2016-06-27 12:30:25 -04:00
|
|
|
to_field_name='slug',
|
2021-03-03 13:30:33 -05:00
|
|
|
label='Location (slug)',
|
2016-06-27 12:30:25 -04:00
|
|
|
)
|
2018-11-01 16:03:42 -04:00
|
|
|
status = django_filters.MultipleChoiceFilter(
|
2019-11-15 22:03:41 -05:00
|
|
|
choices=RackStatusChoices,
|
2018-11-01 16:03:42 -04:00
|
|
|
null_value=None
|
|
|
|
|
)
|
2020-12-17 15:50:47 -05:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=RackTypeChoices
|
|
|
|
|
)
|
|
|
|
|
width = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=RackWidthChoices
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
role_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=RackRole.objects.all(),
|
2016-08-10 11:52:27 -04:00
|
|
|
label='Role (ID)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
role = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='role__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=RackRole.objects.all(),
|
2016-08-10 11:52:27 -04:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Role (slug)',
|
|
|
|
|
)
|
2019-08-12 12:10:36 -04:00
|
|
|
serial = django_filters.CharFilter(
|
|
|
|
|
lookup_expr='iexact'
|
|
|
|
|
)
|
2018-11-12 15:48:58 -05:00
|
|
|
tag = TagFilter()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Rack
|
2018-11-02 09:51:17 -04:00
|
|
|
fields = [
|
2020-12-17 15:50:47 -05:00
|
|
|
'id', 'name', 'facility_id', 'asset_tag', 'u_height', 'desc_units', 'outer_width', 'outer_depth',
|
|
|
|
|
'outer_unit',
|
2018-11-02 09:51:17 -04:00
|
|
|
]
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
2016-03-01 11:23:03 -05:00
|
|
|
return queryset.filter(
|
|
|
|
|
Q(name__icontains=value) |
|
2016-07-29 12:51:23 -04:00
|
|
|
Q(facility_id__icontains=value) |
|
2017-10-09 15:01:57 -04:00
|
|
|
Q(serial__icontains=value.strip()) |
|
2018-11-02 09:17:51 -04:00
|
|
|
Q(asset_tag__icontains=value.strip()) |
|
2016-07-29 12:51:23 -04:00
|
|
|
Q(comments__icontains=value)
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class RackReservationFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
|
2017-04-06 16:26:48 -04:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
rack_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Rack.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Rack (ID)',
|
|
|
|
|
)
|
2017-04-06 16:26:48 -04:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='rack__site',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2017-04-06 16:26:48 -04:00
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='rack__site__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2017-04-06 16:26:48 -04:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site (slug)',
|
|
|
|
|
)
|
2021-03-03 13:30:33 -05:00
|
|
|
location_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=Location.objects.all(),
|
|
|
|
|
field_name='rack__location',
|
2020-03-11 14:57:48 -04:00
|
|
|
lookup_expr='in',
|
2021-03-03 13:30:33 -05:00
|
|
|
label='Location (ID)',
|
2017-04-06 16:26:48 -04:00
|
|
|
)
|
2021-03-03 13:30:33 -05:00
|
|
|
location = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=Location.objects.all(),
|
|
|
|
|
field_name='rack__location',
|
2020-03-11 14:57:48 -04:00
|
|
|
lookup_expr='in',
|
2017-04-06 16:26:48 -04:00
|
|
|
to_field_name='slug',
|
2021-03-03 13:30:33 -05:00
|
|
|
label='Location (slug)',
|
2017-04-06 16:26:48 -04:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
user_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
queryset=User.objects.all(),
|
|
|
|
|
label='User (ID)',
|
|
|
|
|
)
|
|
|
|
|
user = django_filters.ModelMultipleChoiceFilter(
|
2020-12-18 12:18:59 -05:00
|
|
|
field_name='user__username',
|
2017-06-19 16:10:18 -04:00
|
|
|
queryset=User.objects.all(),
|
2017-06-28 16:25:36 -04:00
|
|
|
to_field_name='username',
|
2017-06-19 16:10:18 -04:00
|
|
|
label='User (name)',
|
2017-02-16 13:46:58 -05:00
|
|
|
)
|
2020-06-10 14:55:46 -04:00
|
|
|
tag = TagFilter()
|
2017-02-16 13:46:58 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = RackReservation
|
2020-05-06 12:33:52 -04:00
|
|
|
fields = ['id', 'created']
|
2017-02-16 13:46:58 -05:00
|
|
|
|
2017-04-06 16:26:48 -04:00
|
|
|
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)
|
|
|
|
|
)
|
|
|
|
|
|
2017-02-16 13:46:58 -05:00
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class ManufacturerFilterSet(OrganizationalModelFilterSet):
|
2021-10-21 15:29:52 -04:00
|
|
|
tag = TagFilter()
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Manufacturer
|
2020-03-13 16:24:37 -04:00
|
|
|
fields = ['id', 'name', 'slug', 'description']
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class DeviceTypeFilterSet(PrimaryModelFilterSet):
|
2017-03-01 13:09:19 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
2016-12-16 11:14:44 -05:00
|
|
|
label='Search',
|
|
|
|
|
)
|
2016-03-04 14:39:39 -05:00
|
|
|
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Manufacturer.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Manufacturer (ID)',
|
|
|
|
|
)
|
2016-03-04 14:39:39 -05:00
|
|
|
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='manufacturer__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Manufacturer.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Manufacturer (slug)',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
console_ports = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_console_ports',
|
|
|
|
|
label='Has console ports',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
console_server_ports = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_console_server_ports',
|
|
|
|
|
label='Has console server ports',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
power_ports = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_power_ports',
|
|
|
|
|
label='Has power ports',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
power_outlets = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_power_outlets',
|
|
|
|
|
label='Has power outlets',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
interfaces = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_interfaces',
|
|
|
|
|
label='Has interfaces',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
pass_through_ports = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_pass_through_ports',
|
|
|
|
|
label='Has pass-through ports',
|
|
|
|
|
)
|
2020-01-17 16:39:31 -05:00
|
|
|
device_bays = django_filters.BooleanFilter(
|
|
|
|
|
method='_device_bays',
|
|
|
|
|
label='Has device bays',
|
|
|
|
|
)
|
2018-11-12 15:48:58 -05:00
|
|
|
tag = TagFilter()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DeviceType
|
2017-03-01 13:09:19 -05:00
|
|
|
fields = [
|
2021-10-14 15:38:29 -04:00
|
|
|
'id', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'subdevice_role', 'airflow',
|
2017-03-01 13:09:19 -05:00
|
|
|
]
|
2016-12-16 11:14:44 -05:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
2016-12-16 11:14:44 -05:00
|
|
|
return queryset.filter(
|
|
|
|
|
Q(manufacturer__name__icontains=value) |
|
|
|
|
|
Q(model__icontains=value) |
|
|
|
|
|
Q(part_number__icontains=value) |
|
|
|
|
|
Q(comments__icontains=value)
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2018-11-02 10:45:31 -04:00
|
|
|
def _console_ports(self, queryset, name, value):
|
2020-07-02 13:07:32 -04:00
|
|
|
return queryset.exclude(consoleporttemplates__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _console_server_ports(self, queryset, name, value):
|
2020-07-02 13:07:32 -04:00
|
|
|
return queryset.exclude(consoleserverporttemplates__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _power_ports(self, queryset, name, value):
|
2020-07-02 13:07:32 -04:00
|
|
|
return queryset.exclude(powerporttemplates__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _power_outlets(self, queryset, name, value):
|
2020-07-02 13:07:32 -04:00
|
|
|
return queryset.exclude(poweroutlettemplates__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _interfaces(self, queryset, name, value):
|
2020-07-02 13:07:32 -04:00
|
|
|
return queryset.exclude(interfacetemplates__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _pass_through_ports(self, queryset, name, value):
|
|
|
|
|
return queryset.exclude(
|
2020-07-02 13:07:32 -04:00
|
|
|
frontporttemplates__isnull=value,
|
|
|
|
|
rearporttemplates__isnull=value
|
2018-11-02 10:45:31 -04:00
|
|
|
)
|
|
|
|
|
|
2020-01-17 16:39:31 -05:00
|
|
|
def _device_bays(self, queryset, name, value):
|
2020-07-02 13:07:32 -04:00
|
|
|
return queryset.exclude(devicebaytemplates__isnull=value)
|
2020-01-17 16:39:31 -05:00
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class DeviceTypeComponentFilterSet(django_filters.FilterSet):
|
2021-10-08 13:42:43 -04:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2017-02-03 17:18:47 -05:00
|
|
|
devicetype_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=DeviceType.objects.all(),
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='device_type_id',
|
2017-02-03 17:18:47 -05:00
|
|
|
label='Device type (ID)',
|
|
|
|
|
)
|
|
|
|
|
|
2021-10-08 13:42:43 -04:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(name__icontains=value)
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class ConsolePortTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ConsolePortTemplate
|
2019-10-30 14:25:55 -04:00
|
|
|
fields = ['id', 'name', 'type']
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class ConsoleServerPortTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ConsoleServerPortTemplate
|
2019-10-30 14:25:55 -04:00
|
|
|
fields = ['id', 'name', 'type']
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class PowerPortTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerPortTemplate
|
2019-11-06 15:30:54 -05:00
|
|
|
fields = ['id', 'name', 'type', 'maximum_draw', 'allocated_draw']
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class PowerOutletTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
|
2021-04-14 16:17:19 -04:00
|
|
|
feed_leg = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=PowerOutletFeedLegChoices,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerOutletTemplate
|
2019-11-06 15:30:54 -05:00
|
|
|
fields = ['id', 'name', 'type', 'feed_leg']
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
|
2021-04-14 16:17:19 -04:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=InterfaceTypeChoices,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = InterfaceTemplate
|
2019-05-07 13:55:48 -04:00
|
|
|
fields = ['id', 'name', 'type', 'mgmt_only']
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
|
2021-04-14 16:17:19 -04:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=PortTypeChoices,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2018-10-03 14:04:16 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
2018-10-25 12:08:13 -04:00
|
|
|
model = FrontPortTemplate
|
2021-06-09 16:51:51 -04:00
|
|
|
fields = ['id', 'name', 'type', 'color']
|
2018-10-03 14:04:16 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class RearPortTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
|
2021-04-14 16:17:19 -04:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=PortTypeChoices,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2018-10-03 14:04:16 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
2018-10-25 12:08:13 -04:00
|
|
|
model = RearPortTemplate
|
2021-06-09 16:51:51 -04:00
|
|
|
fields = ['id', 'name', 'type', 'color', 'positions']
|
2018-10-03 14:04:16 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class DeviceBayTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DeviceBayTemplate
|
2019-05-07 13:55:48 -04:00
|
|
|
fields = ['id', 'name']
|
2017-02-03 17:18:47 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class DeviceRoleFilterSet(OrganizationalModelFilterSet):
|
2021-10-21 15:29:52 -04:00
|
|
|
tag = TagFilter()
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DeviceRole
|
2019-05-07 13:55:48 -04:00
|
|
|
fields = ['id', 'name', 'slug', 'color', 'vm_role']
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class PlatformFilterSet(OrganizationalModelFilterSet):
|
2017-12-19 16:15:26 -05:00
|
|
|
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='manufacturer',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Manufacturer.objects.all(),
|
2017-12-19 16:15:26 -05:00
|
|
|
label='Manufacturer (ID)',
|
|
|
|
|
)
|
|
|
|
|
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='manufacturer__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Manufacturer.objects.all(),
|
2017-12-19 16:15:26 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Manufacturer (slug)',
|
|
|
|
|
)
|
2021-10-21 15:29:52 -04:00
|
|
|
tag = TagFilter()
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Platform
|
2020-03-13 16:24:37 -04:00
|
|
|
fields = ['id', 'name', 'slug', 'napalm_driver', 'description']
|
2017-06-19 16:10:18 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class DeviceFilterSet(PrimaryModelFilterSet, TenancyFilterSet, LocalConfigContextFilterSet):
|
2017-03-01 13:09:19 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Search',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='device_type__manufacturer',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Manufacturer.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Manufacturer (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='device_type__manufacturer__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Manufacturer.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Manufacturer (slug)',
|
2016-07-13 13:07:02 -04:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
device_type_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=DeviceType.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Device type (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
|
|
|
|
role_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='device_role_id',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=DeviceRole.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Role (ID)',
|
|
|
|
|
)
|
|
|
|
|
role = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='device_role__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=DeviceRole.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Role (slug)',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
platform_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Platform.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Platform (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
platform = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='platform__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Platform.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Platform (slug)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2019-02-27 14:46:11 -06:00
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='site__region',
|
|
|
|
|
lookup_expr='in',
|
2018-11-06 10:31:56 -05:00
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
2019-02-27 14:46:11 -06:00
|
|
|
region = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='site__region',
|
|
|
|
|
lookup_expr='in',
|
2019-02-27 14:46:11 -06:00
|
|
|
to_field_name='slug',
|
2018-11-06 10:31:56 -05:00
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2021-03-08 13:28:53 -05:00
|
|
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Site group (ID)',
|
|
|
|
|
)
|
|
|
|
|
site_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site group (slug)',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='site__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Site name (slug)',
|
|
|
|
|
)
|
2021-03-03 13:30:33 -05:00
|
|
|
location_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=Location.objects.all(),
|
2021-03-03 14:28:07 -05:00
|
|
|
field_name='location',
|
2020-03-11 14:57:48 -04:00
|
|
|
lookup_expr='in',
|
2021-03-03 13:30:33 -05:00
|
|
|
label='Location (ID)',
|
2017-06-19 16:10:18 -04:00
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
rack_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='rack',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Rack.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Rack (ID)',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
cluster_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Cluster.objects.all(),
|
2017-08-21 16:53:36 -04:00
|
|
|
label='VM cluster (ID)',
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
model = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='device_type__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=DeviceType.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Device model (slug)',
|
|
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
status = django_filters.MultipleChoiceFilter(
|
2019-11-25 19:23:43 -05:00
|
|
|
choices=DeviceStatusChoices,
|
2017-11-14 12:58:47 -05:00
|
|
|
null_value=None
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2017-06-19 16:10:18 -04:00
|
|
|
is_full_depth = django_filters.BooleanFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='device_type__is_full_depth',
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Is full depth',
|
2016-03-01 11:23:03 -05:00
|
|
|
)
|
2019-07-18 21:21:56 -04:00
|
|
|
mac_address = MultiValueMACAddressFilter(
|
|
|
|
|
field_name='interfaces__mac_address',
|
2017-06-19 16:10:18 -04:00
|
|
|
label='MAC address',
|
|
|
|
|
)
|
2021-12-08 11:08:19 -05:00
|
|
|
serial = MultiValueCharFilter(
|
2019-08-12 12:10:36 -04:00
|
|
|
lookup_expr='iexact'
|
|
|
|
|
)
|
2017-03-21 21:29:03 -04:00
|
|
|
has_primary_ip = django_filters.BooleanFilter(
|
|
|
|
|
method='_has_primary_ip',
|
|
|
|
|
label='Has a primary IP',
|
|
|
|
|
)
|
2018-02-01 13:02:34 -05:00
|
|
|
virtual_chassis_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-15 00:42:01 -05:00
|
|
|
field_name='virtual_chassis',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=VirtualChassis.objects.all(),
|
2018-02-01 13:02:34 -05:00
|
|
|
label='Virtual chassis (ID)',
|
|
|
|
|
)
|
2019-06-24 16:31:21 -04:00
|
|
|
virtual_chassis_member = django_filters.BooleanFilter(
|
|
|
|
|
method='_virtual_chassis_member',
|
|
|
|
|
label='Is a virtual chassis member'
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
console_ports = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_console_ports',
|
|
|
|
|
label='Has console ports',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
console_server_ports = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_console_server_ports',
|
|
|
|
|
label='Has console server ports',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
power_ports = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_power_ports',
|
|
|
|
|
label='Has power ports',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
power_outlets = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_power_outlets',
|
|
|
|
|
label='Has power outlets',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
interfaces = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_interfaces',
|
|
|
|
|
label='Has interfaces',
|
|
|
|
|
)
|
2018-11-15 00:42:01 -05:00
|
|
|
pass_through_ports = django_filters.BooleanFilter(
|
2018-11-02 10:45:31 -04:00
|
|
|
method='_pass_through_ports',
|
|
|
|
|
label='Has pass-through ports',
|
|
|
|
|
)
|
2020-01-17 16:39:31 -05:00
|
|
|
device_bays = django_filters.BooleanFilter(
|
|
|
|
|
method='_device_bays',
|
|
|
|
|
label='Has device bays',
|
|
|
|
|
)
|
2018-11-12 15:48:58 -05:00
|
|
|
tag = TagFilter()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Device
|
2021-10-14 16:04:42 -04:00
|
|
|
fields = ['id', 'name', 'asset_tag', 'face', 'position', 'airflow', 'vc_position', 'vc_priority']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-03-01 13:09:19 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
2017-08-03 09:26:28 -04:00
|
|
|
return queryset.filter(
|
2016-03-01 11:23:03 -05:00
|
|
|
Q(name__icontains=value) |
|
2016-08-11 11:58:21 -04:00
|
|
|
Q(serial__icontains=value.strip()) |
|
2020-07-02 13:07:32 -04:00
|
|
|
Q(inventoryitems__serial__icontains=value.strip()) |
|
2018-06-14 13:17:06 -04:00
|
|
|
Q(asset_tag__icontains=value.strip()) |
|
2016-07-29 12:51:23 -04:00
|
|
|
Q(comments__icontains=value)
|
2017-08-03 09:26:28 -04:00
|
|
|
).distinct()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-03-21 21:29:03 -04:00
|
|
|
def _has_primary_ip(self, queryset, name, value):
|
2020-10-09 11:46:16 -04:00
|
|
|
params = Q(primary_ip4__isnull=False) | Q(primary_ip6__isnull=False)
|
2017-03-21 21:29:03 -04:00
|
|
|
if value:
|
2020-10-09 11:46:16 -04:00
|
|
|
return queryset.filter(params)
|
|
|
|
|
return queryset.exclude(params)
|
2017-03-21 21:29:03 -04:00
|
|
|
|
2019-06-24 16:31:21 -04:00
|
|
|
def _virtual_chassis_member(self, queryset, name, value):
|
|
|
|
|
return queryset.exclude(virtual_chassis__isnull=value)
|
|
|
|
|
|
2018-11-02 10:45:31 -04:00
|
|
|
def _console_ports(self, queryset, name, value):
|
2018-11-15 00:42:01 -05:00
|
|
|
return queryset.exclude(consoleports__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _console_server_ports(self, queryset, name, value):
|
2018-11-15 00:42:01 -05:00
|
|
|
return queryset.exclude(consoleserverports__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _power_ports(self, queryset, name, value):
|
2018-11-15 00:42:01 -05:00
|
|
|
return queryset.exclude(powerports__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _power_outlets(self, queryset, name, value):
|
2019-05-28 13:10:54 -04:00
|
|
|
return queryset.exclude(poweroutlets__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _interfaces(self, queryset, name, value):
|
2018-11-15 00:42:01 -05:00
|
|
|
return queryset.exclude(interfaces__isnull=value)
|
2018-11-02 10:45:31 -04:00
|
|
|
|
|
|
|
|
def _pass_through_ports(self, queryset, name, value):
|
|
|
|
|
return queryset.exclude(
|
2018-11-15 00:42:01 -05:00
|
|
|
frontports__isnull=value,
|
|
|
|
|
rearports__isnull=value
|
2018-11-02 10:45:31 -04:00
|
|
|
)
|
|
|
|
|
|
2020-01-17 16:39:31 -05:00
|
|
|
def _device_bays(self, queryset, name, value):
|
2020-07-02 13:07:32 -04:00
|
|
|
return queryset.exclude(devicebays__isnull=value)
|
2020-01-17 16:39:31 -05:00
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class DeviceComponentFilterSet(django_filters.FilterSet):
|
2019-01-31 13:36:30 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2020-01-21 12:27:52 -05:00
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='device__site__region',
|
|
|
|
|
lookup_expr='in',
|
2019-12-05 16:10:49 -06:00
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
2020-01-21 12:27:52 -05:00
|
|
|
region = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='device__site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-21 12:27:52 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Region (slug)',
|
2019-12-05 16:10:49 -06:00
|
|
|
)
|
2021-03-08 13:28:53 -05:00
|
|
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='device__site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Site group (ID)',
|
|
|
|
|
)
|
|
|
|
|
site_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='device__site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site group (slug)',
|
|
|
|
|
)
|
2019-12-05 16:10:49 -06:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='device__site',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2019-12-05 16:10:49 -06:00
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='device__site__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2020-01-21 12:27:52 -05:00
|
|
|
to_field_name='slug',
|
2019-12-05 16:10:49 -06:00
|
|
|
label='Site name (slug)',
|
|
|
|
|
)
|
2021-08-24 21:10:30 -04:00
|
|
|
location_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='device__location',
|
|
|
|
|
queryset=Location.objects.all(),
|
|
|
|
|
label='Location (ID)',
|
|
|
|
|
)
|
|
|
|
|
location = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='device__location__slug',
|
|
|
|
|
queryset=Location.objects.all(),
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Location (slug)',
|
|
|
|
|
)
|
2019-07-18 20:42:15 -04:00
|
|
|
device_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Device.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
label='Device (ID)',
|
|
|
|
|
)
|
2020-01-08 11:12:44 -05:00
|
|
|
device = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='device__name',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Device.objects.all(),
|
2016-03-01 11:23:03 -05:00
|
|
|
to_field_name='name',
|
|
|
|
|
label='Device (name)',
|
|
|
|
|
)
|
2021-11-13 21:30:38 -05:00
|
|
|
virtual_chassis_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='device__virtual_chassis',
|
|
|
|
|
queryset=VirtualChassis.objects.all(),
|
|
|
|
|
label='Virtual Chassis (ID)'
|
|
|
|
|
)
|
|
|
|
|
virtual_chassis = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='device__virtual_chassis__name',
|
|
|
|
|
queryset=VirtualChassis.objects.all(),
|
|
|
|
|
to_field_name='name',
|
|
|
|
|
label='Virtual Chassis',
|
|
|
|
|
)
|
2018-11-12 15:48:58 -05:00
|
|
|
tag = TagFilter()
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2019-01-31 13:36:30 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
2019-02-20 14:34:05 -05:00
|
|
|
Q(name__icontains=value) |
|
2020-07-02 10:46:02 -04:00
|
|
|
Q(label__icontains=value) |
|
2019-02-20 14:34:05 -05:00
|
|
|
Q(description__icontains=value)
|
2019-01-31 13:36:30 -05:00
|
|
|
)
|
|
|
|
|
|
2017-02-03 17:18:47 -05:00
|
|
|
|
2020-10-06 17:28:25 -04:00
|
|
|
class CableTerminationFilterSet(django_filters.FilterSet):
|
|
|
|
|
cabled = django_filters.BooleanFilter(
|
|
|
|
|
field_name='cable',
|
|
|
|
|
lookup_expr='isnull',
|
|
|
|
|
exclude=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2020-10-02 12:25:31 -04:00
|
|
|
class PathEndpointFilterSet(django_filters.FilterSet):
|
2020-10-06 17:28:25 -04:00
|
|
|
connected = django_filters.BooleanFilter(
|
|
|
|
|
method='filter_connected'
|
2020-10-02 12:25:31 -04:00
|
|
|
)
|
|
|
|
|
|
2020-10-06 17:28:25 -04:00
|
|
|
def filter_connected(self, queryset, name, value):
|
|
|
|
|
if value:
|
|
|
|
|
return queryset.filter(_path__is_active=True)
|
|
|
|
|
else:
|
|
|
|
|
return queryset.filter(Q(_path__isnull=True) | Q(_path__is_active=False))
|
2020-10-02 12:25:31 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class ConsolePortFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet, PathEndpointFilterSet):
|
2019-10-30 14:25:55 -04:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
2019-11-15 21:00:34 -05:00
|
|
|
choices=ConsolePortTypeChoices,
|
2019-10-30 14:25:55 -04:00
|
|
|
null_value=None
|
|
|
|
|
)
|
2017-02-03 17:18:47 -05:00
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
class Meta:
|
|
|
|
|
model = ConsolePort
|
2021-03-24 14:48:38 -04:00
|
|
|
fields = ['id', 'name', 'label', 'description']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class ConsoleServerPortFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet, PathEndpointFilterSet):
|
2019-10-30 14:25:55 -04:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
2019-11-15 21:00:34 -05:00
|
|
|
choices=ConsolePortTypeChoices,
|
2019-10-30 14:25:55 -04:00
|
|
|
null_value=None
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ConsoleServerPort
|
2021-03-24 14:48:38 -04:00
|
|
|
fields = ['id', 'name', 'label', 'description']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class PowerPortFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet, PathEndpointFilterSet):
|
2019-11-06 16:56:46 -05:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
2019-11-15 21:00:34 -05:00
|
|
|
choices=PowerPortTypeChoices,
|
2019-11-06 16:56:46 -05:00
|
|
|
null_value=None
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerPort
|
2021-03-24 14:48:38 -04:00
|
|
|
fields = ['id', 'name', 'label', 'maximum_draw', 'allocated_draw', 'description']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class PowerOutletFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet, PathEndpointFilterSet):
|
2019-11-06 16:56:46 -05:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
2019-11-15 21:00:34 -05:00
|
|
|
choices=PowerOutletTypeChoices,
|
2019-11-06 16:56:46 -05:00
|
|
|
null_value=None
|
|
|
|
|
)
|
2021-04-14 16:17:19 -04:00
|
|
|
feed_leg = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=PowerOutletFeedLegChoices,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerOutlet
|
2021-03-24 14:48:38 -04:00
|
|
|
fields = ['id', 'name', 'label', 'feed_leg', 'description']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class InterfaceFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet, PathEndpointFilterSet):
|
2018-12-30 02:35:18 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2020-01-21 12:27:52 -05:00
|
|
|
# Override device and device_id filters from DeviceComponentFilterSet to match against any peer virtual chassis
|
|
|
|
|
# members
|
2019-12-04 02:00:08 -05:00
|
|
|
device = MultiValueCharFilter(
|
2017-06-14 14:34:14 -04:00
|
|
|
method='filter_device',
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='name',
|
2017-06-14 14:34:14 -04:00
|
|
|
label='Device',
|
|
|
|
|
)
|
2019-07-18 20:42:15 -04:00
|
|
|
device_id = MultiValueNumberFilter(
|
|
|
|
|
method='filter_device_id',
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='pk',
|
2017-06-14 14:34:14 -04:00
|
|
|
label='Device (ID)',
|
|
|
|
|
)
|
2019-04-12 14:09:03 -04:00
|
|
|
kind = django_filters.CharFilter(
|
|
|
|
|
method='filter_kind',
|
|
|
|
|
label='Kind of interface',
|
2017-02-27 16:52:13 -05:00
|
|
|
)
|
2021-03-05 13:49:41 -05:00
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='parent',
|
|
|
|
|
queryset=Interface.objects.all(),
|
|
|
|
|
label='Parent interface (ID)',
|
|
|
|
|
)
|
2021-10-21 16:30:18 -04:00
|
|
|
bridge_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='bridge',
|
|
|
|
|
queryset=Interface.objects.all(),
|
|
|
|
|
label='Bridged interface (ID)',
|
|
|
|
|
)
|
2017-05-17 14:43:44 -04:00
|
|
|
lag_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='lag',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Interface.objects.all(),
|
2017-05-17 14:43:44 -04:00
|
|
|
label='LAG interface (ID)',
|
|
|
|
|
)
|
2019-07-18 21:21:56 -04:00
|
|
|
mac_address = MultiValueMACAddressFilter()
|
2021-10-07 15:09:42 -04:00
|
|
|
wwn = MultiValueWWNFilter()
|
2018-11-12 15:48:58 -05:00
|
|
|
tag = TagFilter()
|
2018-11-05 14:37:52 -06:00
|
|
|
vlan_id = django_filters.CharFilter(
|
2018-11-05 15:45:21 -05:00
|
|
|
method='filter_vlan_id',
|
|
|
|
|
label='Assigned VLAN'
|
2018-11-05 14:37:52 -06:00
|
|
|
)
|
|
|
|
|
vlan = django_filters.CharFilter(
|
2018-11-05 15:45:21 -05:00
|
|
|
method='filter_vlan',
|
|
|
|
|
label='Assigned VID'
|
2018-11-05 14:37:52 -06:00
|
|
|
)
|
2019-04-12 13:42:56 -04:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
2019-11-21 22:11:02 -05:00
|
|
|
choices=InterfaceTypeChoices,
|
2018-11-26 13:19:05 -06:00
|
|
|
null_value=None
|
|
|
|
|
)
|
2021-10-20 13:34:39 -04:00
|
|
|
rf_role = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=WirelessRoleChoices
|
|
|
|
|
)
|
|
|
|
|
rf_channel = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=WirelessChannelChoices
|
|
|
|
|
)
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Interface
|
2021-10-12 10:46:41 -04:00
|
|
|
fields = [
|
2021-10-13 20:16:36 -04:00
|
|
|
'id', 'name', 'label', 'type', 'enabled', 'mtu', 'mgmt_only', 'mode', 'rf_role', 'rf_channel',
|
2021-10-28 09:31:45 -04:00
|
|
|
'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'description',
|
2021-10-12 10:46:41 -04:00
|
|
|
]
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-06-14 14:34:14 -04:00
|
|
|
def filter_device(self, queryset, name, value):
|
|
|
|
|
try:
|
2019-12-04 02:00:08 -05:00
|
|
|
devices = Device.objects.filter(**{'{}__in'.format(name): value})
|
|
|
|
|
vc_interface_ids = []
|
|
|
|
|
for device in devices:
|
2021-04-27 09:36:48 -04:00
|
|
|
vc_interface_ids.extend(device.vc_interfaces().values_list('id', flat=True))
|
2018-11-05 11:51:38 -05:00
|
|
|
return queryset.filter(pk__in=vc_interface_ids)
|
2017-06-14 14:34:14 -04:00
|
|
|
except Device.DoesNotExist:
|
|
|
|
|
return queryset.none()
|
|
|
|
|
|
2019-07-18 20:42:15 -04:00
|
|
|
def filter_device_id(self, queryset, name, id_list):
|
|
|
|
|
# Include interfaces belonging to peer virtual chassis members
|
|
|
|
|
vc_interface_ids = []
|
|
|
|
|
try:
|
|
|
|
|
devices = Device.objects.filter(pk__in=id_list)
|
|
|
|
|
for device in devices:
|
2021-04-27 09:36:48 -04:00
|
|
|
vc_interface_ids += device.vc_interfaces().values_list('id', flat=True)
|
2019-07-18 20:42:15 -04:00
|
|
|
return queryset.filter(pk__in=vc_interface_ids)
|
|
|
|
|
except Device.DoesNotExist:
|
|
|
|
|
return queryset.none()
|
|
|
|
|
|
2018-11-05 15:45:21 -05:00
|
|
|
def filter_vlan_id(self, queryset, name, value):
|
|
|
|
|
value = value.strip()
|
|
|
|
|
if not value:
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(untagged_vlan_id=value) |
|
|
|
|
|
Q(tagged_vlans=value)
|
|
|
|
|
)
|
2018-11-05 14:37:52 -06:00
|
|
|
|
2018-11-05 15:45:21 -05:00
|
|
|
def filter_vlan(self, queryset, name, value):
|
|
|
|
|
value = value.strip()
|
|
|
|
|
if not value:
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(
|
|
|
|
|
Q(untagged_vlan_id__vid=value) |
|
|
|
|
|
Q(tagged_vlans__vid=value)
|
|
|
|
|
)
|
2018-11-05 14:37:52 -06:00
|
|
|
|
2019-04-12 14:09:03 -04:00
|
|
|
def filter_kind(self, queryset, name, value):
|
2017-02-27 16:52:13 -05:00
|
|
|
value = value.strip().lower()
|
2017-06-16 17:52:09 -04:00
|
|
|
return {
|
2019-04-12 13:42:56 -04:00
|
|
|
'physical': queryset.exclude(type__in=NONCONNECTABLE_IFACE_TYPES),
|
|
|
|
|
'virtual': queryset.filter(type__in=VIRTUAL_IFACE_TYPES),
|
|
|
|
|
'wireless': queryset.filter(type__in=WIRELESS_IFACE_TYPES),
|
2017-06-16 17:52:09 -04:00
|
|
|
}.get(value, queryset.none())
|
2017-02-27 16:52:13 -05:00
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class FrontPortFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet):
|
2021-04-14 16:17:19 -04:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=PortTypeChoices,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2018-10-03 14:04:16 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
2018-10-25 12:08:13 -04:00
|
|
|
model = FrontPort
|
2021-06-09 16:51:51 -04:00
|
|
|
fields = ['id', 'name', 'label', 'type', 'color', 'description']
|
2018-10-03 14:04:16 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class RearPortFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableTerminationFilterSet):
|
2021-04-14 16:17:19 -04:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=PortTypeChoices,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2018-10-03 14:04:16 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
2018-10-25 12:08:13 -04:00
|
|
|
model = RearPort
|
2021-06-09 16:51:51 -04:00
|
|
|
fields = ['id', 'name', 'label', 'type', 'color', 'positions', 'description']
|
2018-10-03 14:04:16 -04:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class DeviceBayFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet):
|
2017-02-01 14:34:19 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = DeviceBay
|
2021-03-24 14:48:38 -04:00
|
|
|
fields = ['id', 'name', 'label', 'description']
|
2017-02-01 14:34:19 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class InventoryItemFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet):
|
2018-01-30 17:46:00 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2017-10-30 17:20:22 -04:00
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=InventoryItem.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Parent inventory item (ID)',
|
|
|
|
|
)
|
|
|
|
|
manufacturer_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Manufacturer.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
label='Manufacturer (ID)',
|
|
|
|
|
)
|
|
|
|
|
manufacturer = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='manufacturer__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Manufacturer.objects.all(),
|
2017-06-19 16:10:18 -04:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Manufacturer (slug)',
|
|
|
|
|
)
|
2019-08-12 12:10:36 -04:00
|
|
|
serial = django_filters.CharFilter(
|
|
|
|
|
lookup_expr='iexact'
|
|
|
|
|
)
|
2017-02-01 14:34:19 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
2017-03-21 12:54:08 -04:00
|
|
|
model = InventoryItem
|
2021-03-24 14:48:38 -04:00
|
|
|
fields = ['id', 'name', 'label', 'part_id', 'asset_tag', 'discovered']
|
2018-01-30 17:46:00 -05:00
|
|
|
|
|
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(name__icontains=value) |
|
|
|
|
|
Q(part_id__icontains=value) |
|
2019-12-27 16:17:17 -05:00
|
|
|
Q(serial__icontains=value) |
|
|
|
|
|
Q(asset_tag__icontains=value) |
|
2018-01-30 17:46:00 -05:00
|
|
|
Q(description__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
return queryset.filter(qs_filter)
|
2017-02-01 14:34:19 -05:00
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class VirtualChassisFilterSet(PrimaryModelFilterSet):
|
2018-02-21 09:53:23 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2021-01-08 19:30:27 -07:00
|
|
|
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)',
|
|
|
|
|
)
|
2020-01-03 13:52:50 -05:00
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='master__site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
|
|
|
|
region = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='master__site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2021-03-08 13:28:53 -05:00
|
|
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='master__site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Site group (ID)',
|
|
|
|
|
)
|
|
|
|
|
site_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='master__site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site group (slug)',
|
|
|
|
|
)
|
2018-02-21 09:53:23 -05:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='master__site',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2018-02-21 09:53:23 -05:00
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='master__site__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2018-02-21 09:53:23 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site name (slug)',
|
|
|
|
|
)
|
|
|
|
|
tenant_id = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='master__tenant',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Tenant.objects.all(),
|
2018-02-21 09:53:23 -05:00
|
|
|
label='Tenant (ID)',
|
|
|
|
|
)
|
|
|
|
|
tenant = django_filters.ModelMultipleChoiceFilter(
|
2018-11-02 13:46:28 -04:00
|
|
|
field_name='master__tenant__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Tenant.objects.all(),
|
2018-02-21 09:53:23 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Tenant (slug)',
|
|
|
|
|
)
|
2018-11-12 15:48:58 -05:00
|
|
|
tag = TagFilter()
|
2018-01-19 13:34:37 -05:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = VirtualChassis
|
2021-01-08 19:30:27 -07:00
|
|
|
fields = ['id', 'domain', 'name']
|
2018-01-19 13:34:37 -05:00
|
|
|
|
2018-02-21 09:53:23 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
2020-07-23 14:32:30 -04:00
|
|
|
Q(name__icontains=value) |
|
|
|
|
|
Q(members__name__icontains=value) |
|
2018-02-21 09:53:23 -05:00
|
|
|
Q(domain__icontains=value)
|
|
|
|
|
)
|
2021-03-22 11:15:58 +01:00
|
|
|
return queryset.filter(qs_filter).distinct()
|
2018-02-21 09:53:23 -05:00
|
|
|
|
2018-01-19 13:34:37 -05:00
|
|
|
|
2021-10-19 12:33:17 -04:00
|
|
|
class CableFilterSet(TenancyFilterSet, PrimaryModelFilterSet):
|
2018-10-26 10:28:25 -04:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2021-10-06 12:06:32 -04:00
|
|
|
termination_a_type = ContentTypeFilter()
|
|
|
|
|
termination_a_id = MultiValueNumberFilter()
|
|
|
|
|
termination_b_type = ContentTypeFilter()
|
|
|
|
|
termination_b_id = MultiValueNumberFilter()
|
2018-11-28 14:22:55 -05:00
|
|
|
type = django_filters.MultipleChoiceFilter(
|
2019-11-25 19:57:13 -05:00
|
|
|
choices=CableTypeChoices
|
2018-11-28 14:22:55 -05:00
|
|
|
)
|
2019-05-07 13:55:48 -04:00
|
|
|
status = django_filters.MultipleChoiceFilter(
|
2021-10-13 14:31:30 -04:00
|
|
|
choices=LinkStatusChoices
|
2019-05-07 13:55:48 -04:00
|
|
|
)
|
2018-11-28 14:22:55 -05:00
|
|
|
color = django_filters.MultipleChoiceFilter(
|
2020-05-26 09:36:27 -04:00
|
|
|
choices=ColorChoices
|
2018-11-28 14:22:55 -05:00
|
|
|
)
|
2019-09-27 12:18:53 -04:00
|
|
|
device_id = MultiValueNumberFilter(
|
|
|
|
|
method='filter_device'
|
|
|
|
|
)
|
2020-01-02 16:53:14 -05:00
|
|
|
device = MultiValueCharFilter(
|
2019-09-27 12:18:53 -04:00
|
|
|
method='filter_device',
|
|
|
|
|
field_name='device__name'
|
|
|
|
|
)
|
|
|
|
|
rack_id = MultiValueNumberFilter(
|
|
|
|
|
method='filter_device',
|
|
|
|
|
field_name='device__rack_id'
|
|
|
|
|
)
|
2021-12-10 16:41:03 -05:00
|
|
|
rack = MultiValueCharFilter(
|
2019-09-27 12:18:53 -04:00
|
|
|
method='filter_device',
|
|
|
|
|
field_name='device__rack__name'
|
|
|
|
|
)
|
|
|
|
|
site_id = MultiValueNumberFilter(
|
|
|
|
|
method='filter_device',
|
|
|
|
|
field_name='device__site_id'
|
2019-04-29 10:07:08 -04:00
|
|
|
)
|
2021-12-10 16:41:03 -05:00
|
|
|
site = MultiValueCharFilter(
|
2019-09-27 12:18:53 -04:00
|
|
|
method='filter_device',
|
2019-09-27 15:12:16 -04:00
|
|
|
field_name='device__site__slug'
|
2019-04-29 10:07:08 -04:00
|
|
|
)
|
2020-06-10 14:55:46 -04:00
|
|
|
tag = TagFilter()
|
2018-10-24 14:59:46 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Cable
|
2021-10-06 12:06:32 -04:00
|
|
|
fields = ['id', 'label', 'length', 'length_unit', 'termination_a_id', 'termination_b_id']
|
2018-10-26 10:28:25 -04:00
|
|
|
|
|
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(label__icontains=value)
|
2018-10-24 14:59:46 -04:00
|
|
|
|
2019-09-27 12:18:53 -04:00
|
|
|
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
|
2019-04-29 10:07:08 -04:00
|
|
|
|
2018-10-24 14:59:46 -04:00
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class PowerPanelFilterSet(PrimaryModelFilterSet):
|
2019-03-12 12:05:58 -04:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2020-01-03 13:52:50 -05:00
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
|
|
|
|
region = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2021-03-08 13:28:53 -05:00
|
|
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Site group (ID)',
|
|
|
|
|
)
|
|
|
|
|
site_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site group (slug)',
|
|
|
|
|
)
|
2019-03-12 12:05:58 -04:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2019-03-12 12:05:58 -04:00
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='site__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2019-03-12 12:05:58 -04:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site name (slug)',
|
|
|
|
|
)
|
2021-03-03 13:30:33 -05:00
|
|
|
location_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=Location.objects.all(),
|
|
|
|
|
field_name='location',
|
2020-03-11 14:57:48 -04:00
|
|
|
lookup_expr='in',
|
2021-04-11 13:43:06 -04:00
|
|
|
label='Location (ID)',
|
2019-03-12 12:05:58 -04:00
|
|
|
)
|
2020-06-10 14:55:46 -04:00
|
|
|
tag = TagFilter()
|
2019-03-12 12:05:58 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerPanel
|
2020-05-06 12:33:52 -04:00
|
|
|
fields = ['id', 'name']
|
2019-03-12 12:05:58 -04:00
|
|
|
|
|
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(name__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
|
|
|
|
|
2021-04-29 15:59:11 -04:00
|
|
|
class PowerFeedFilterSet(PrimaryModelFilterSet, CableTerminationFilterSet, PathEndpointFilterSet):
|
2019-03-12 12:05:58 -04:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2020-01-03 13:52:50 -05:00
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='power_panel__site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
label='Region (ID)',
|
|
|
|
|
)
|
|
|
|
|
region = TreeNodeMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Region.objects.all(),
|
2020-02-09 17:46:21 -05:00
|
|
|
field_name='power_panel__site__region',
|
|
|
|
|
lookup_expr='in',
|
2020-01-03 13:52:50 -05:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Region (slug)',
|
|
|
|
|
)
|
2021-03-08 13:28:53 -05:00
|
|
|
site_group_id = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='power_panel__site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
label='Site group (ID)',
|
|
|
|
|
)
|
|
|
|
|
site_group = TreeNodeMultipleChoiceFilter(
|
|
|
|
|
queryset=SiteGroup.objects.all(),
|
|
|
|
|
field_name='power_panel__site__group',
|
|
|
|
|
lookup_expr='in',
|
|
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site group (slug)',
|
|
|
|
|
)
|
2019-03-12 12:05:58 -04:00
|
|
|
site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='power_panel__site',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2019-03-12 12:05:58 -04:00
|
|
|
label='Site (ID)',
|
|
|
|
|
)
|
|
|
|
|
site = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='power_panel__site__slug',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Site.objects.all(),
|
2019-03-12 12:05:58 -04:00
|
|
|
to_field_name='slug',
|
|
|
|
|
label='Site name (slug)',
|
|
|
|
|
)
|
2019-04-09 15:37:31 -04:00
|
|
|
power_panel_id = django_filters.ModelMultipleChoiceFilter(
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=PowerPanel.objects.all(),
|
2019-04-09 15:37:31 -04:00
|
|
|
label='Power panel (ID)',
|
|
|
|
|
)
|
2019-03-12 12:05:58 -04:00
|
|
|
rack_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
field_name='rack',
|
2020-07-23 12:48:03 -04:00
|
|
|
queryset=Rack.objects.all(),
|
2019-03-12 12:05:58 -04:00
|
|
|
label='Rack (ID)',
|
|
|
|
|
)
|
2021-04-14 16:17:19 -04:00
|
|
|
status = django_filters.MultipleChoiceFilter(
|
|
|
|
|
choices=PowerFeedStatusChoices,
|
|
|
|
|
null_value=None
|
|
|
|
|
)
|
2019-04-11 10:49:43 -04:00
|
|
|
tag = TagFilter()
|
2019-03-12 12:05:58 -04:00
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerFeed
|
2020-05-06 12:33:52 -04:00
|
|
|
fields = ['id', 'name', 'status', 'type', 'supply', 'phase', 'voltage', 'amperage', 'max_utilization']
|
2019-03-12 12:05:58 -04:00
|
|
|
|
|
|
|
|
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)
|
2021-10-06 10:08:56 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# Connection filter sets
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
class ConnectionFilterSet(BaseFilterSet):
|
2021-11-12 15:05:33 -05:00
|
|
|
q = django_filters.CharFilter(
|
|
|
|
|
method='search',
|
|
|
|
|
label='Search',
|
|
|
|
|
)
|
2021-10-06 10:08:56 -04:00
|
|
|
site_id = MultiValueNumberFilter(
|
|
|
|
|
method='filter_connections',
|
|
|
|
|
field_name='device__site_id'
|
|
|
|
|
)
|
|
|
|
|
site = MultiValueCharFilter(
|
|
|
|
|
method='filter_connections',
|
|
|
|
|
field_name='device__site__slug'
|
|
|
|
|
)
|
|
|
|
|
device_id = MultiValueNumberFilter(
|
|
|
|
|
method='filter_connections',
|
|
|
|
|
field_name='device_id'
|
|
|
|
|
)
|
|
|
|
|
device = MultiValueCharFilter(
|
|
|
|
|
method='filter_connections',
|
|
|
|
|
field_name='device__name'
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def filter_connections(self, queryset, name, value):
|
|
|
|
|
if not value:
|
|
|
|
|
return queryset
|
|
|
|
|
return queryset.filter(**{f'{name}__in': value})
|
|
|
|
|
|
2021-11-12 15:05:33 -05:00
|
|
|
def search(self, queryset, name, value):
|
|
|
|
|
if not value.strip():
|
|
|
|
|
return queryset
|
|
|
|
|
qs_filter = (
|
|
|
|
|
Q(device__name__icontains=value) |
|
|
|
|
|
Q(cable__label__icontains=value)
|
|
|
|
|
)
|
|
|
|
|
return queryset.filter(qs_filter)
|
|
|
|
|
|
2021-10-06 10:08:56 -04:00
|
|
|
|
|
|
|
|
class ConsoleConnectionFilterSet(ConnectionFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = ConsolePort
|
|
|
|
|
fields = ['name']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PowerConnectionFilterSet(ConnectionFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = PowerPort
|
|
|
|
|
fields = ['name']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class InterfaceConnectionFilterSet(ConnectionFilterSet):
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = Interface
|
|
|
|
|
fields = []
|