|
@@ -11,7 +11,8 @@ from ipam.filtersets import PrimaryIPFilterSet
|
|
|
from ipam.models import ASN, IPAddress, VLANTranslationPolicy, VRF
|
|
from ipam.models import ASN, IPAddress, VLANTranslationPolicy, VRF
|
|
|
from netbox.choices import ColorChoices
|
|
from netbox.choices import ColorChoices
|
|
|
from netbox.filtersets import (
|
|
from netbox.filtersets import (
|
|
|
- BaseFilterSet, ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, NetBoxModelFilterSet,
|
|
|
|
|
|
|
+ BaseFilterSet, ChangeLoggedModelFilterSet, NestedGroupModelFilterSet, NetBoxModelFilterSet,
|
|
|
|
|
+ OrganizationalModelFilterSet,
|
|
|
)
|
|
)
|
|
|
from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet
|
|
from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet
|
|
|
from tenancy.models import *
|
|
from tenancy.models import *
|
|
@@ -81,7 +82,7 @@ __all__ = (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
-class RegionFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
|
|
|
|
|
|
|
+class RegionFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet):
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
queryset=Region.objects.all(),
|
|
queryset=Region.objects.all(),
|
|
|
label=_('Parent region (ID)'),
|
|
label=_('Parent region (ID)'),
|
|
@@ -110,18 +111,8 @@ class RegionFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
|
|
|
model = Region
|
|
model = Region
|
|
|
fields = ('id', 'name', 'slug', 'description')
|
|
fields = ('id', 'name', 'slug', 'description')
|
|
|
|
|
|
|
|
- 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)
|
|
|
|
|
- ).distinct()
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
-class SiteGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
|
|
|
|
|
|
|
+class SiteGroupFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet):
|
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
|
parent_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
queryset=SiteGroup.objects.all(),
|
|
queryset=SiteGroup.objects.all(),
|
|
|
label=_('Parent site group (ID)'),
|
|
label=_('Parent site group (ID)'),
|
|
@@ -150,16 +141,6 @@ class SiteGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
|
|
|
model = SiteGroup
|
|
model = SiteGroup
|
|
|
fields = ('id', 'name', 'slug', 'description')
|
|
fields = ('id', 'name', 'slug', 'description')
|
|
|
|
|
|
|
|
- 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)
|
|
|
|
|
- ).distinct()
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
class SiteFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
|
|
class SiteFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
|
|
|
status = django_filters.MultipleChoiceFilter(
|
|
status = django_filters.MultipleChoiceFilter(
|
|
@@ -225,7 +206,7 @@ class SiteFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSe
|
|
|
return queryset.filter(qs_filter).distinct()
|
|
return queryset.filter(qs_filter).distinct()
|
|
|
|
|
|
|
|
|
|
|
|
|
-class LocationFilterSet(TenancyFilterSet, ContactModelFilterSet, OrganizationalModelFilterSet):
|
|
|
|
|
|
|
+class LocationFilterSet(TenancyFilterSet, ContactModelFilterSet, NestedGroupModelFilterSet):
|
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
|
region_id = TreeNodeMultipleChoiceFilter(
|
|
|
queryset=Region.objects.all(),
|
|
queryset=Region.objects.all(),
|
|
|
field_name='site__region',
|
|
field_name='site__region',
|
|
@@ -295,15 +276,13 @@ class LocationFilterSet(TenancyFilterSet, ContactModelFilterSet, OrganizationalM
|
|
|
fields = ('id', 'name', 'slug', 'facility', 'description')
|
|
fields = ('id', 'name', 'slug', 'facility', 'description')
|
|
|
|
|
|
|
|
def search(self, queryset, name, value):
|
|
def search(self, queryset, name, value):
|
|
|
- if not value.strip():
|
|
|
|
|
- return queryset
|
|
|
|
|
- return queryset.filter(
|
|
|
|
|
- Q(name__icontains=value) |
|
|
|
|
|
- Q(slug__icontains=value) |
|
|
|
|
|
- Q(facility__icontains=value) |
|
|
|
|
|
- Q(description__icontains=value) |
|
|
|
|
|
- Q(comments__icontains=value)
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ # extended in order to include querying on Location.facility
|
|
|
|
|
+ queryset = super().search(queryset, name, value)
|
|
|
|
|
+
|
|
|
|
|
+ if value.strip():
|
|
|
|
|
+ queryset = queryset | queryset.model.objects.filter(facility__icontains=value)
|
|
|
|
|
+
|
|
|
|
|
+ return queryset
|
|
|
|
|
|
|
|
|
|
|
|
|
class RackRoleFilterSet(OrganizationalModelFilterSet):
|
|
class RackRoleFilterSet(OrganizationalModelFilterSet):
|