mirror of
				https://github.com/netbox-community/netbox.git
				synced 2024-05-10 07:54:54 +00:00 
			
		
		
		
	Restore id__in filters to retain backward compatability until v2.7
This commit is contained in:
		@@ -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():
 | 
			
		||||
 
 | 
			
		||||
@@ -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():
 | 
			
		||||
 
 | 
			
		||||
@@ -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():
 | 
			
		||||
 
 | 
			
		||||
@@ -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():
 | 
			
		||||
 
 | 
			
		||||
@@ -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():
 | 
			
		||||
 
 | 
			
		||||
@@ -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.
 | 
			
		||||
 
 | 
			
		||||
@@ -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',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user