|
@@ -6,9 +6,10 @@ from django.contrib.contenttypes.models import ContentType
|
|
|
from django.db.models import Q
|
|
from django.db.models import Q
|
|
|
from taggit.models import Tag
|
|
from taggit.models import Tag
|
|
|
|
|
|
|
|
-from dcim.models import Site
|
|
|
|
|
|
|
+from dcim.models import DeviceRole, Platform, Region, Site
|
|
|
|
|
+from tenancy.models import Tenant, TenantGroup
|
|
|
from .constants import CF_FILTER_DISABLED, CF_FILTER_EXACT, CF_TYPE_BOOLEAN, CF_TYPE_SELECT
|
|
from .constants import CF_FILTER_DISABLED, CF_FILTER_EXACT, CF_TYPE_BOOLEAN, CF_TYPE_SELECT
|
|
|
-from .models import CustomField, Graph, ExportTemplate, ObjectChange, TopologyMap, UserAction
|
|
|
|
|
|
|
+from .models import ConfigContext, CustomField, Graph, ExportTemplate, ObjectChange, TopologyMap, UserAction
|
|
|
|
|
|
|
|
|
|
|
|
|
class CustomFieldFilter(django_filters.Filter):
|
|
class CustomFieldFilter(django_filters.Filter):
|
|
@@ -124,6 +125,92 @@ class TopologyMapFilter(django_filters.FilterSet):
|
|
|
fields = ['name', 'slug']
|
|
fields = ['name', 'slug']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+class ConfigContextFilter(django_filters.FilterSet):
|
|
|
|
|
+ q = django_filters.CharFilter(
|
|
|
|
|
+ method='search',
|
|
|
|
|
+ label='Search',
|
|
|
|
|
+ )
|
|
|
|
|
+ region_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='regions',
|
|
|
|
|
+ queryset=Region.objects.all(),
|
|
|
|
|
+ label='Region',
|
|
|
|
|
+ )
|
|
|
|
|
+ region = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='regions__slug',
|
|
|
|
|
+ queryset=Region.objects.all(),
|
|
|
|
|
+ to_field_name='slug',
|
|
|
|
|
+ label='Region (slug)',
|
|
|
|
|
+ )
|
|
|
|
|
+ site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='sites',
|
|
|
|
|
+ queryset=Site.objects.all(),
|
|
|
|
|
+ label='Site',
|
|
|
|
|
+ )
|
|
|
|
|
+ site = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='sites__slug',
|
|
|
|
|
+ queryset=Site.objects.all(),
|
|
|
|
|
+ to_field_name='slug',
|
|
|
|
|
+ label='Site (slug)',
|
|
|
|
|
+ )
|
|
|
|
|
+ role_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='roles',
|
|
|
|
|
+ queryset=DeviceRole.objects.all(),
|
|
|
|
|
+ label='Role',
|
|
|
|
|
+ )
|
|
|
|
|
+ role = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='roles__slug',
|
|
|
|
|
+ queryset=DeviceRole.objects.all(),
|
|
|
|
|
+ to_field_name='slug',
|
|
|
|
|
+ label='Role (slug)',
|
|
|
|
|
+ )
|
|
|
|
|
+ platform_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='platforms',
|
|
|
|
|
+ queryset=Platform.objects.all(),
|
|
|
|
|
+ label='Platform',
|
|
|
|
|
+ )
|
|
|
|
|
+ platform = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='platforms__slug',
|
|
|
|
|
+ queryset=Platform.objects.all(),
|
|
|
|
|
+ to_field_name='slug',
|
|
|
|
|
+ label='Platform (slug)',
|
|
|
|
|
+ )
|
|
|
|
|
+ tenant_group_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='tenant_groups',
|
|
|
|
|
+ queryset=TenantGroup.objects.all(),
|
|
|
|
|
+ label='Tenant group',
|
|
|
|
|
+ )
|
|
|
|
|
+ tenant_group = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='tenant_groups__slug',
|
|
|
|
|
+ queryset=TenantGroup.objects.all(),
|
|
|
|
|
+ to_field_name='slug',
|
|
|
|
|
+ label='Tenant group (slug)',
|
|
|
|
|
+ )
|
|
|
|
|
+ tenant_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='tenants',
|
|
|
|
|
+ queryset=Tenant.objects.all(),
|
|
|
|
|
+ label='Tenant',
|
|
|
|
|
+ )
|
|
|
|
|
+ tenant = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
+ name='tenants__slug',
|
|
|
|
|
+ queryset=Tenant.objects.all(),
|
|
|
|
|
+ to_field_name='slug',
|
|
|
|
|
+ label='Tenant (slug)',
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ class Meta:
|
|
|
|
|
+ model = ConfigContext
|
|
|
|
|
+ fields = ['name', 'is_active']
|
|
|
|
|
+
|
|
|
|
|
+ def search(self, queryset, name, value):
|
|
|
|
|
+ if not value.strip():
|
|
|
|
|
+ return queryset
|
|
|
|
|
+ return queryset.filter(
|
|
|
|
|
+ Q(name__icontains=value) |
|
|
|
|
|
+ Q(description__icontains=value) |
|
|
|
|
|
+ Q(data__icontains=value)
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
class ObjectChangeFilter(django_filters.FilterSet):
|
|
class ObjectChangeFilter(django_filters.FilterSet):
|
|
|
q = django_filters.CharFilter(
|
|
q = django_filters.CharFilter(
|
|
|
method='search',
|
|
method='search',
|