|
@@ -7,6 +7,7 @@ from django.db.models import Q
|
|
from dcim.models import Site, Device, Interface
|
|
from dcim.models import Site, Device, Interface
|
|
from extras.filters import CustomFieldFilterSet
|
|
from extras.filters import CustomFieldFilterSet
|
|
from tenancy.models import Tenant
|
|
from tenancy.models import Tenant
|
|
|
|
+from utilities.filters import NullableModelMultipleChoiceFilter
|
|
|
|
|
|
from .models import RIR, Aggregate, VRF, Prefix, IPAddress, VLAN, VLANGroup, Role
|
|
from .models import RIR, Aggregate, VRF, Prefix, IPAddress, VLAN, VLANGroup, Role
|
|
|
|
|
|
@@ -21,12 +22,12 @@ class VRFFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
lookup_type='icontains',
|
|
lookup_type='icontains',
|
|
label='Name',
|
|
label='Name',
|
|
)
|
|
)
|
|
- tenant_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ tenant_id = NullableModelMultipleChoiceFilter(
|
|
name='tenant',
|
|
name='tenant',
|
|
queryset=Tenant.objects.all(),
|
|
queryset=Tenant.objects.all(),
|
|
label='Tenant (ID)',
|
|
label='Tenant (ID)',
|
|
)
|
|
)
|
|
- tenant = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ tenant = NullableModelMultipleChoiceFilter(
|
|
name='tenant',
|
|
name='tenant',
|
|
queryset=Tenant.objects.all(),
|
|
queryset=Tenant.objects.all(),
|
|
to_field_name='slug',
|
|
to_field_name='slug',
|
|
@@ -85,29 +86,34 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
action='search_by_parent',
|
|
action='search_by_parent',
|
|
label='Parent prefix',
|
|
label='Parent prefix',
|
|
)
|
|
)
|
|
- vrf = django_filters.MethodFilter(
|
|
|
|
- action='_vrf',
|
|
|
|
|
|
+ vrf = NullableModelMultipleChoiceFilter(
|
|
|
|
+ name='vrf',
|
|
|
|
+ queryset=VRF.objects.all(),
|
|
label='VRF',
|
|
label='VRF',
|
|
)
|
|
)
|
|
# Duplicate of `vrf` for backward-compatibility
|
|
# Duplicate of `vrf` for backward-compatibility
|
|
- vrf_id = django_filters.MethodFilter(
|
|
|
|
- action='_vrf',
|
|
|
|
|
|
+ vrf_id = NullableModelMultipleChoiceFilter(
|
|
|
|
+ name='vrf_id',
|
|
|
|
+ queryset=VRF.objects.all(),
|
|
label='VRF',
|
|
label='VRF',
|
|
)
|
|
)
|
|
- tenant_id = django_filters.MethodFilter(
|
|
|
|
- action='_tenant_id',
|
|
|
|
|
|
+ tenant_id = NullableModelMultipleChoiceFilter(
|
|
|
|
+ name='tenant',
|
|
|
|
+ queryset=Tenant.objects.all(),
|
|
label='Tenant (ID)',
|
|
label='Tenant (ID)',
|
|
)
|
|
)
|
|
- tenant = django_filters.MethodFilter(
|
|
|
|
- action='_tenant',
|
|
|
|
- label='Tenant',
|
|
|
|
|
|
+ tenant = NullableModelMultipleChoiceFilter(
|
|
|
|
+ name='tenant',
|
|
|
|
+ queryset=Tenant.objects.all(),
|
|
|
|
+ to_field_name='slug',
|
|
|
|
+ label='Tenant (slug)',
|
|
)
|
|
)
|
|
- site_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ site_id = NullableModelMultipleChoiceFilter(
|
|
name='site',
|
|
name='site',
|
|
queryset=Site.objects.all(),
|
|
queryset=Site.objects.all(),
|
|
label='Site (ID)',
|
|
label='Site (ID)',
|
|
)
|
|
)
|
|
- site = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ site = NullableModelMultipleChoiceFilter(
|
|
name='site',
|
|
name='site',
|
|
queryset=Site.objects.all(),
|
|
queryset=Site.objects.all(),
|
|
to_field_name='slug',
|
|
to_field_name='slug',
|
|
@@ -122,12 +128,12 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
name='vlan__vid',
|
|
name='vlan__vid',
|
|
label='VLAN number (1-4095)',
|
|
label='VLAN number (1-4095)',
|
|
)
|
|
)
|
|
- role_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ role_id = NullableModelMultipleChoiceFilter(
|
|
name='role',
|
|
name='role',
|
|
queryset=Role.objects.all(),
|
|
queryset=Role.objects.all(),
|
|
label='Role (ID)',
|
|
label='Role (ID)',
|
|
)
|
|
)
|
|
- role = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ role = NullableModelMultipleChoiceFilter(
|
|
name='role',
|
|
name='role',
|
|
queryset=Role.objects.all(),
|
|
queryset=Role.objects.all(),
|
|
to_field_name='slug',
|
|
to_field_name='slug',
|
|
@@ -136,7 +142,7 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
model = Prefix
|
|
model = Prefix
|
|
- fields = ['family', 'site_id', 'site', 'vrf', 'vrf_id', 'vlan_id', 'vlan_vid', 'status', 'role_id', 'role']
|
|
|
|
|
|
+ fields = ['family', 'site_id', 'site', 'vlan_id', 'vlan_vid', 'status', 'role_id', 'role']
|
|
|
|
|
|
def search(self, queryset, value):
|
|
def search(self, queryset, value):
|
|
qs_filter = Q(description__icontains=value)
|
|
qs_filter = Q(description__icontains=value)
|
|
@@ -157,17 +163,6 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
except AddrFormatError:
|
|
except AddrFormatError:
|
|
return queryset.none()
|
|
return queryset.none()
|
|
|
|
|
|
- def _vrf(self, queryset, value):
|
|
|
|
- if str(value) == '':
|
|
|
|
- return queryset
|
|
|
|
- try:
|
|
|
|
- vrf_id = int(value)
|
|
|
|
- except ValueError:
|
|
|
|
- return queryset.none()
|
|
|
|
- if vrf_id == 0:
|
|
|
|
- return queryset.filter(vrf__isnull=True)
|
|
|
|
- return queryset.filter(vrf__pk=value)
|
|
|
|
-
|
|
|
|
def _tenant(self, queryset, value):
|
|
def _tenant(self, queryset, value):
|
|
if str(value) == '':
|
|
if str(value) == '':
|
|
return queryset
|
|
return queryset
|
|
@@ -196,22 +191,27 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
action='search_by_parent',
|
|
action='search_by_parent',
|
|
label='Parent prefix',
|
|
label='Parent prefix',
|
|
)
|
|
)
|
|
- vrf = django_filters.MethodFilter(
|
|
|
|
- action='_vrf',
|
|
|
|
|
|
+ vrf = NullableModelMultipleChoiceFilter(
|
|
|
|
+ name='vrf',
|
|
|
|
+ queryset=VRF.objects.all(),
|
|
label='VRF',
|
|
label='VRF',
|
|
)
|
|
)
|
|
# Duplicate of `vrf` for backward-compatibility
|
|
# Duplicate of `vrf` for backward-compatibility
|
|
- vrf_id = django_filters.MethodFilter(
|
|
|
|
- action='_vrf',
|
|
|
|
|
|
+ vrf_id = NullableModelMultipleChoiceFilter(
|
|
|
|
+ name='vrf_id',
|
|
|
|
+ queryset=VRF.objects.all(),
|
|
label='VRF',
|
|
label='VRF',
|
|
)
|
|
)
|
|
- tenant_id = django_filters.MethodFilter(
|
|
|
|
- action='_tenant_id',
|
|
|
|
|
|
+ tenant_id = NullableModelMultipleChoiceFilter(
|
|
|
|
+ name='tenant',
|
|
|
|
+ queryset=Tenant.objects.all(),
|
|
label='Tenant (ID)',
|
|
label='Tenant (ID)',
|
|
)
|
|
)
|
|
- tenant = django_filters.MethodFilter(
|
|
|
|
- action='_tenant',
|
|
|
|
- label='Tenant',
|
|
|
|
|
|
+ tenant = NullableModelMultipleChoiceFilter(
|
|
|
|
+ name='tenant',
|
|
|
|
+ queryset=Tenant.objects.all(),
|
|
|
|
+ to_field_name='slug',
|
|
|
|
+ label='Tenant (slug)',
|
|
)
|
|
)
|
|
device_id = django_filters.ModelMultipleChoiceFilter(
|
|
device_id = django_filters.ModelMultipleChoiceFilter(
|
|
name='interface__device',
|
|
name='interface__device',
|
|
@@ -232,7 +232,7 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
model = IPAddress
|
|
model = IPAddress
|
|
- fields = ['q', 'family', 'vrf_id', 'vrf', 'device_id', 'device', 'interface_id']
|
|
|
|
|
|
+ fields = ['q', 'family', 'device_id', 'device', 'interface_id']
|
|
|
|
|
|
def search(self, queryset, value):
|
|
def search(self, queryset, value):
|
|
qs_filter = Q(description__icontains=value)
|
|
qs_filter = Q(description__icontains=value)
|
|
@@ -317,12 +317,12 @@ class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
to_field_name='slug',
|
|
to_field_name='slug',
|
|
label='Site (slug)',
|
|
label='Site (slug)',
|
|
)
|
|
)
|
|
- group_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ group_id = NullableModelMultipleChoiceFilter(
|
|
name='group',
|
|
name='group',
|
|
queryset=VLANGroup.objects.all(),
|
|
queryset=VLANGroup.objects.all(),
|
|
label='Group (ID)',
|
|
label='Group (ID)',
|
|
)
|
|
)
|
|
- group = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ group = NullableModelMultipleChoiceFilter(
|
|
name='group',
|
|
name='group',
|
|
queryset=VLANGroup.objects.all(),
|
|
queryset=VLANGroup.objects.all(),
|
|
to_field_name='slug',
|
|
to_field_name='slug',
|
|
@@ -337,23 +337,23 @@ class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet):
|
|
name='vid',
|
|
name='vid',
|
|
label='VLAN number (1-4095)',
|
|
label='VLAN number (1-4095)',
|
|
)
|
|
)
|
|
- tenant_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ tenant_id = NullableModelMultipleChoiceFilter(
|
|
name='tenant',
|
|
name='tenant',
|
|
queryset=Tenant.objects.all(),
|
|
queryset=Tenant.objects.all(),
|
|
label='Tenant (ID)',
|
|
label='Tenant (ID)',
|
|
)
|
|
)
|
|
- tenant = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ tenant = NullableModelMultipleChoiceFilter(
|
|
name='tenant',
|
|
name='tenant',
|
|
queryset=Tenant.objects.all(),
|
|
queryset=Tenant.objects.all(),
|
|
to_field_name='slug',
|
|
to_field_name='slug',
|
|
label='Tenant (slug)',
|
|
label='Tenant (slug)',
|
|
)
|
|
)
|
|
- role_id = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ role_id = NullableModelMultipleChoiceFilter(
|
|
name='role',
|
|
name='role',
|
|
queryset=Role.objects.all(),
|
|
queryset=Role.objects.all(),
|
|
label='Role (ID)',
|
|
label='Role (ID)',
|
|
)
|
|
)
|
|
- role = django_filters.ModelMultipleChoiceFilter(
|
|
|
|
|
|
+ role = NullableModelMultipleChoiceFilter(
|
|
name='role',
|
|
name='role',
|
|
queryset=Role.objects.all(),
|
|
queryset=Role.objects.all(),
|
|
to_field_name='slug',
|
|
to_field_name='slug',
|