Restore id__in filters to retain backward compatability until v2.7

This commit is contained in:
Jeremy Stretch 2019-05-08 21:08:35 -04:00
parent ffa34c6133
commit dfffd1ea94
7 changed files with 107 additions and 24 deletions

View File

@ -4,12 +4,16 @@ from django.db.models import Q
from dcim.models import Site
from extras.filters import CustomFieldFilterSet
from tenancy.models import Tenant
from utilities.filters import NameSlugSearchFilterSet, TagFilter
from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter
from .constants import CIRCUIT_STATUS_CHOICES
from .models import Provider, Circuit, CircuitTermination, CircuitType
class ProviderFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -29,7 +33,7 @@ class ProviderFilter(CustomFieldFilterSet):
class Meta:
model = Provider
fields = ['id', 'name', 'slug', 'asn', 'account']
fields = ['name', 'slug', 'asn', 'account']
def search(self, queryset, name, value):
if not value.strip():
@ -51,6 +55,10 @@ class CircuitTypeFilter(NameSlugSearchFilterSet):
class CircuitFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -104,7 +112,7 @@ class CircuitFilter(CustomFieldFilterSet):
class Meta:
model = Circuit
fields = ['id', 'cid', 'install_date', 'commit_rate']
fields = ['cid', 'install_date', 'commit_rate']
def search(self, queryset, name, value):
if not value.strip():

View File

@ -8,7 +8,7 @@ from netaddr.core import AddrFormatError
from extras.filters import CustomFieldFilterSet
from tenancy.models import Tenant
from utilities.constants import COLOR_CHOICES
from utilities.filters import NameSlugSearchFilterSet, TagFilter, TreeNodeMultipleChoiceFilter
from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
from virtualization.models import Cluster
from .constants import *
from .models import (
@ -38,6 +38,10 @@ class RegionFilter(NameSlugSearchFilterSet):
class SiteFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -122,6 +126,10 @@ class RackRoleFilter(NameSlugSearchFilterSet):
class RackFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -192,6 +200,10 @@ class RackFilter(CustomFieldFilterSet):
class RackReservationFilter(django_filters.FilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -245,7 +257,7 @@ class RackReservationFilter(django_filters.FilterSet):
class Meta:
model = RackReservation
fields = ['id', 'created']
fields = ['created']
def search(self, queryset, name, value):
if not value.strip():
@ -266,6 +278,10 @@ class ManufacturerFilter(NameSlugSearchFilterSet):
class DeviceTypeFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -309,7 +325,7 @@ class DeviceTypeFilter(CustomFieldFilterSet):
class Meta:
model = DeviceType
fields = [
'id', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'subdevice_role',
'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'subdevice_role',
]
def search(self, queryset, name, value):
@ -434,6 +450,10 @@ class PlatformFilter(NameSlugSearchFilterSet):
class DeviceFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -1062,6 +1082,10 @@ class InterfaceConnectionFilter(django_filters.FilterSet):
class PowerPanelFilter(django_filters.FilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -1084,7 +1108,7 @@ class PowerPanelFilter(django_filters.FilterSet):
class Meta:
model = PowerPanel
fields = ['id', 'name']
fields = ['name']
def search(self, queryset, name, value):
if not value.strip():
@ -1096,6 +1120,10 @@ class PowerPanelFilter(django_filters.FilterSet):
class PowerFeedFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -1124,7 +1152,7 @@ class PowerFeedFilter(CustomFieldFilterSet):
class Meta:
model = PowerFeed
fields = ['id', 'name', 'status', 'type', 'supply', 'phase', 'voltage', 'amperage', 'power_factor']
fields = ['name', 'status', 'type', 'supply', 'phase', 'voltage', 'amperage', 'power_factor']
def search(self, queryset, name, value):
if not value.strip():

View File

@ -7,13 +7,17 @@ from netaddr.core import AddrFormatError
from dcim.models import Site, Device, Interface
from extras.filters import CustomFieldFilterSet
from tenancy.models import Tenant
from utilities.filters import NameSlugSearchFilterSet, TagFilter
from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter
from virtualization.models import VirtualMachine
from .constants import IPADDRESS_ROLE_CHOICES, IPADDRESS_STATUS_CHOICES, PREFIX_STATUS_CHOICES, VLAN_STATUS_CHOICES
from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
class VRFFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -30,10 +34,6 @@ class VRFFilter(CustomFieldFilterSet):
)
tag = TagFilter()
class Meta:
model = VRF
fields = ['id', 'name', 'rd', 'enforce_unique']
def search(self, queryset, name, value):
if not value.strip():
return queryset
@ -43,15 +43,27 @@ class VRFFilter(CustomFieldFilterSet):
Q(description__icontains=value)
)
class Meta:
model = VRF
fields = ['name', 'rd', 'enforce_unique']
class RIRFilter(NameSlugSearchFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
class Meta:
model = RIR
fields = ['id', 'name', 'slug', 'is_private']
fields = ['name', 'slug', 'is_private']
class AggregateFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -74,7 +86,7 @@ class AggregateFilter(CustomFieldFilterSet):
class Meta:
model = Aggregate
fields = ['id', 'family', 'date_added']
fields = ['family', 'date_added']
def search(self, queryset, name, value):
if not value.strip():
@ -109,6 +121,10 @@ class RoleFilter(NameSlugSearchFilterSet):
class PrefixFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -189,7 +205,7 @@ class PrefixFilter(CustomFieldFilterSet):
class Meta:
model = Prefix
fields = ['id', 'family', 'is_pool']
fields = ['family', 'is_pool']
def search(self, queryset, name, value):
if not value.strip():
@ -252,6 +268,10 @@ class PrefixFilter(CustomFieldFilterSet):
class IPAddressFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -324,7 +344,7 @@ class IPAddressFilter(CustomFieldFilterSet):
class Meta:
model = IPAddress
fields = ['id', 'family', 'dns_name']
fields = ['family', 'dns_name']
def search(self, queryset, name, value):
if not value.strip():
@ -389,6 +409,10 @@ class VLANGroupFilter(NameSlugSearchFilterSet):
class VLANFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -441,7 +465,7 @@ class VLANFilter(CustomFieldFilterSet):
class Meta:
model = VLAN
fields = ['id', 'vid', 'name']
fields = ['vid', 'name']
def search(self, queryset, name, value):
if not value.strip():

View File

@ -3,7 +3,7 @@ from django.db.models import Q
from dcim.models import Device
from extras.filters import CustomFieldFilterSet
from utilities.filters import NameSlugSearchFilterSet, TagFilter
from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter
from .models import Secret, SecretRole
@ -15,6 +15,10 @@ class SecretRoleFilter(NameSlugSearchFilterSet):
class SecretFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -43,7 +47,7 @@ class SecretFilter(CustomFieldFilterSet):
class Meta:
model = Secret
fields = ['id', 'name']
fields = ['name']
def search(self, queryset, name, value):
if not value.strip():

View File

@ -2,7 +2,7 @@ import django_filters
from django.db.models import Q
from extras.filters import CustomFieldFilterSet
from utilities.filters import NameSlugSearchFilterSet, TagFilter
from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter
from .models import Tenant, TenantGroup
@ -14,6 +14,10 @@ class TenantGroupFilter(NameSlugSearchFilterSet):
class TenantFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -32,7 +36,7 @@ class TenantFilter(CustomFieldFilterSet):
class Meta:
model = Tenant
fields = ['id', 'name', 'slug']
fields = ['name', 'slug']
def search(self, queryset, name, value):
if not value.strip():

View File

@ -55,6 +55,13 @@ class TreeNodeMultipleChoiceFilter(django_filters.ModelMultipleChoiceFilter):
return super().filter(qs, value)
class NumericInFilter(django_filters.BaseInFilter, django_filters.NumberFilter):
"""
Filters for a set of numeric values. Example: id__in=100,200,300
"""
pass
class NullableCharFieldFilter(django_filters.CharFilter):
"""
Allow matching on null field values by passing a special string used to signify NULL.

View File

@ -6,7 +6,7 @@ from netaddr.core import AddrFormatError
from dcim.models import DeviceRole, Interface, Platform, Region, Site
from extras.filters import CustomFieldFilterSet
from tenancy.models import Tenant
from utilities.filters import NameSlugSearchFilterSet, TagFilter, TreeNodeMultipleChoiceFilter
from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
from .constants import VM_STATUS_CHOICES
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
@ -26,6 +26,10 @@ class ClusterGroupFilter(NameSlugSearchFilterSet):
class ClusterFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',
@ -64,7 +68,7 @@ class ClusterFilter(CustomFieldFilterSet):
class Meta:
model = Cluster
fields = ['id', 'name']
fields = ['name']
def search(self, queryset, name, value):
if not value.strip():
@ -76,6 +80,10 @@ class ClusterFilter(CustomFieldFilterSet):
class VirtualMachineFilter(CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
)
q = django_filters.CharFilter(
method='search',
label='Search',