From 29d546a3f1f1e31be29410c3fa6da23639e7942d Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 2 Nov 2018 13:46:28 -0400 Subject: [PATCH] Upgraded django-filter to 2.0.0 --- netbox/circuits/api/views.py | 8 +- netbox/circuits/filters.py | 30 +++++--- netbox/dcim/api/views.py | 64 ++++++++-------- netbox/dcim/filters.py | 115 ++++++++++++++++------------- netbox/extras/api/views.py | 12 +-- netbox/extras/filters.py | 32 ++++---- netbox/ipam/api/views.py | 18 ++--- netbox/ipam/filters.py | 82 ++++++++++++-------- netbox/secrets/api/views.py | 4 +- netbox/secrets/filters.py | 11 ++- netbox/tenancy/api/views.py | 4 +- netbox/tenancy/filters.py | 9 ++- netbox/virtualization/api/views.py | 10 +-- netbox/virtualization/filters.py | 42 ++++++----- requirements.txt | 4 +- 15 files changed, 248 insertions(+), 197 deletions(-) diff --git a/netbox/circuits/api/views.py b/netbox/circuits/api/views.py index 95229fe9e..229abd705 100644 --- a/netbox/circuits/api/views.py +++ b/netbox/circuits/api/views.py @@ -29,7 +29,7 @@ class CircuitsFieldChoicesViewSet(FieldChoicesViewSet): class ProviderViewSet(CustomFieldModelViewSet): queryset = Provider.objects.prefetch_related('tags') serializer_class = serializers.ProviderSerializer - filter_class = filters.ProviderFilter + filterset_class = filters.ProviderFilter @action(detail=True) def graphs(self, request, pk=None): @@ -49,7 +49,7 @@ class ProviderViewSet(CustomFieldModelViewSet): class CircuitTypeViewSet(ModelViewSet): queryset = CircuitType.objects.all() serializer_class = serializers.CircuitTypeSerializer - filter_class = filters.CircuitTypeFilter + filterset_class = filters.CircuitTypeFilter # @@ -59,7 +59,7 @@ class CircuitTypeViewSet(ModelViewSet): class CircuitViewSet(CustomFieldModelViewSet): queryset = Circuit.objects.select_related('type', 'tenant', 'provider').prefetch_related('tags') serializer_class = serializers.CircuitSerializer - filter_class = filters.CircuitFilter + filterset_class = filters.CircuitFilter # @@ -69,4 +69,4 @@ class CircuitViewSet(CustomFieldModelViewSet): class CircuitTerminationViewSet(ModelViewSet): queryset = CircuitTermination.objects.select_related('circuit', 'site') serializer_class = serializers.CircuitTerminationSerializer - filter_class = filters.CircuitTerminationFilter + filterset_class = filters.CircuitTerminationFilter diff --git a/netbox/circuits/filters.py b/netbox/circuits/filters.py index 59c510808..d1c86f9cf 100644 --- a/netbox/circuits/filters.py +++ b/netbox/circuits/filters.py @@ -10,24 +10,27 @@ from .models import Provider, Circuit, CircuitTermination, CircuitType class ProviderFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', ) site_id = django_filters.ModelMultipleChoiceFilter( - name='circuits__terminations__site', + field_name='circuits__terminations__site', queryset=Site.objects.all(), label='Site', ) site = django_filters.ModelMultipleChoiceFilter( - name='circuits__terminations__site__slug', + field_name='circuits__terminations__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -54,7 +57,10 @@ class CircuitTypeFilter(django_filters.FilterSet): class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -64,7 +70,7 @@ class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Provider (ID)', ) provider = django_filters.ModelMultipleChoiceFilter( - name='provider__slug', + field_name='provider__slug', queryset=Provider.objects.all(), to_field_name='slug', label='Provider (slug)', @@ -74,7 +80,7 @@ class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Circuit type (ID)', ) type = django_filters.ModelMultipleChoiceFilter( - name='type__slug', + field_name='type__slug', queryset=CircuitType.objects.all(), to_field_name='slug', label='Circuit type (slug)', @@ -88,24 +94,24 @@ class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - name='terminations__site', + field_name='terminations__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='terminations__site__slug', + field_name='terminations__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -138,7 +144,7 @@ class CircuitTerminationFilter(django_filters.FilterSet): label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index 20dc4b52c..6a0b29d96 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -86,7 +86,7 @@ class CableTraceMixin(object): class RegionViewSet(ModelViewSet): queryset = Region.objects.all() serializer_class = serializers.RegionSerializer - filter_class = filters.RegionFilter + filterset_class = filters.RegionFilter # @@ -96,7 +96,7 @@ class RegionViewSet(ModelViewSet): class SiteViewSet(CustomFieldModelViewSet): queryset = Site.objects.select_related('region', 'tenant').prefetch_related('tags') serializer_class = serializers.SiteSerializer - filter_class = filters.SiteFilter + filterset_class = filters.SiteFilter @action(detail=True) def graphs(self, request, pk=None): @@ -116,7 +116,7 @@ class SiteViewSet(CustomFieldModelViewSet): class RackGroupViewSet(ModelViewSet): queryset = RackGroup.objects.select_related('site') serializer_class = serializers.RackGroupSerializer - filter_class = filters.RackGroupFilter + filterset_class = filters.RackGroupFilter # @@ -126,7 +126,7 @@ class RackGroupViewSet(ModelViewSet): class RackRoleViewSet(ModelViewSet): queryset = RackRole.objects.all() serializer_class = serializers.RackRoleSerializer - filter_class = filters.RackRoleFilter + filterset_class = filters.RackRoleFilter # @@ -136,7 +136,7 @@ class RackRoleViewSet(ModelViewSet): class RackViewSet(CustomFieldModelViewSet): queryset = Rack.objects.select_related('site', 'group__site', 'tenant').prefetch_related('tags') serializer_class = serializers.RackSerializer - filter_class = filters.RackFilter + filterset_class = filters.RackFilter @action(detail=True) def units(self, request, pk=None): @@ -166,7 +166,7 @@ class RackViewSet(CustomFieldModelViewSet): class RackReservationViewSet(ModelViewSet): queryset = RackReservation.objects.select_related('rack', 'user', 'tenant') serializer_class = serializers.RackReservationSerializer - filter_class = filters.RackReservationFilter + filterset_class = filters.RackReservationFilter # Assign user from request def perform_create(self, serializer): @@ -180,7 +180,7 @@ class RackReservationViewSet(ModelViewSet): class ManufacturerViewSet(ModelViewSet): queryset = Manufacturer.objects.all() serializer_class = serializers.ManufacturerSerializer - filter_class = filters.ManufacturerFilter + filterset_class = filters.ManufacturerFilter # @@ -190,7 +190,7 @@ class ManufacturerViewSet(ModelViewSet): class DeviceTypeViewSet(CustomFieldModelViewSet): queryset = DeviceType.objects.select_related('manufacturer').prefetch_related('tags') serializer_class = serializers.DeviceTypeSerializer - filter_class = filters.DeviceTypeFilter + filterset_class = filters.DeviceTypeFilter # @@ -200,49 +200,49 @@ class DeviceTypeViewSet(CustomFieldModelViewSet): class ConsolePortTemplateViewSet(ModelViewSet): queryset = ConsolePortTemplate.objects.select_related('device_type__manufacturer') serializer_class = serializers.ConsolePortTemplateSerializer - filter_class = filters.ConsolePortTemplateFilter + filterset_class = filters.ConsolePortTemplateFilter class ConsoleServerPortTemplateViewSet(ModelViewSet): queryset = ConsoleServerPortTemplate.objects.select_related('device_type__manufacturer') serializer_class = serializers.ConsoleServerPortTemplateSerializer - filter_class = filters.ConsoleServerPortTemplateFilter + filterset_class = filters.ConsoleServerPortTemplateFilter class PowerPortTemplateViewSet(ModelViewSet): queryset = PowerPortTemplate.objects.select_related('device_type__manufacturer') serializer_class = serializers.PowerPortTemplateSerializer - filter_class = filters.PowerPortTemplateFilter + filterset_class = filters.PowerPortTemplateFilter class PowerOutletTemplateViewSet(ModelViewSet): queryset = PowerOutletTemplate.objects.select_related('device_type__manufacturer') serializer_class = serializers.PowerOutletTemplateSerializer - filter_class = filters.PowerOutletTemplateFilter + filterset_class = filters.PowerOutletTemplateFilter class InterfaceTemplateViewSet(ModelViewSet): queryset = InterfaceTemplate.objects.select_related('device_type__manufacturer') serializer_class = serializers.InterfaceTemplateSerializer - filter_class = filters.InterfaceTemplateFilter + filterset_class = filters.InterfaceTemplateFilter class FrontPortTemplateViewSet(ModelViewSet): queryset = FrontPortTemplate.objects.select_related('device_type__manufacturer') serializer_class = serializers.FrontPortTemplateSerializer - filter_class = filters.FrontPortTemplateFilter + filterset_class = filters.FrontPortTemplateFilter class RearPortTemplateViewSet(ModelViewSet): queryset = RearPortTemplate.objects.select_related('device_type__manufacturer') serializer_class = serializers.RearPortTemplateSerializer - filter_class = filters.RearPortTemplateFilter + filterset_class = filters.RearPortTemplateFilter class DeviceBayTemplateViewSet(ModelViewSet): queryset = DeviceBayTemplate.objects.select_related('device_type__manufacturer') serializer_class = serializers.DeviceBayTemplateSerializer - filter_class = filters.DeviceBayTemplateFilter + filterset_class = filters.DeviceBayTemplateFilter # @@ -252,7 +252,7 @@ class DeviceBayTemplateViewSet(ModelViewSet): class DeviceRoleViewSet(ModelViewSet): queryset = DeviceRole.objects.all() serializer_class = serializers.DeviceRoleSerializer - filter_class = filters.DeviceRoleFilter + filterset_class = filters.DeviceRoleFilter # @@ -262,7 +262,7 @@ class DeviceRoleViewSet(ModelViewSet): class PlatformViewSet(ModelViewSet): queryset = Platform.objects.all() serializer_class = serializers.PlatformSerializer - filter_class = filters.PlatformFilter + filterset_class = filters.PlatformFilter # @@ -276,7 +276,7 @@ class DeviceViewSet(CustomFieldModelViewSet): ).prefetch_related( 'primary_ip4__nat_outside', 'primary_ip6__nat_outside', 'tags', ) - filter_class = filters.DeviceFilter + filterset_class = filters.DeviceFilter def get_serializer_class(self): """ @@ -372,7 +372,7 @@ class ConsolePortViewSet(CableTraceMixin, ModelViewSet): 'tags' ) serializer_class = serializers.ConsolePortSerializer - filter_class = filters.ConsolePortFilter + filterset_class = filters.ConsolePortFilter class ConsoleServerPortViewSet(CableTraceMixin, ModelViewSet): @@ -382,7 +382,7 @@ class ConsoleServerPortViewSet(CableTraceMixin, ModelViewSet): 'tags' ) serializer_class = serializers.ConsoleServerPortSerializer - filter_class = filters.ConsoleServerPortFilter + filterset_class = filters.ConsoleServerPortFilter class PowerPortViewSet(CableTraceMixin, ModelViewSet): @@ -392,7 +392,7 @@ class PowerPortViewSet(CableTraceMixin, ModelViewSet): 'tags' ) serializer_class = serializers.PowerPortSerializer - filter_class = filters.PowerPortFilter + filterset_class = filters.PowerPortFilter class PowerOutletViewSet(CableTraceMixin, ModelViewSet): @@ -402,7 +402,7 @@ class PowerOutletViewSet(CableTraceMixin, ModelViewSet): 'tags' ) serializer_class = serializers.PowerOutletSerializer - filter_class = filters.PowerOutletFilter + filterset_class = filters.PowerOutletFilter class InterfaceViewSet(CableTraceMixin, ModelViewSet): @@ -412,7 +412,7 @@ class InterfaceViewSet(CableTraceMixin, ModelViewSet): 'tags' ) serializer_class = serializers.InterfaceSerializer - filter_class = filters.InterfaceFilter + filterset_class = filters.InterfaceFilter @action(detail=True) def graphs(self, request, pk=None): @@ -432,7 +432,7 @@ class FrontPortViewSet(ModelViewSet): 'tags' ) serializer_class = serializers.FrontPortSerializer - filter_class = filters.FrontPortFilter + filterset_class = filters.FrontPortFilter class RearPortViewSet(ModelViewSet): @@ -442,19 +442,19 @@ class RearPortViewSet(ModelViewSet): 'tags' ) serializer_class = serializers.RearPortSerializer - filter_class = filters.RearPortFilter + filterset_class = filters.RearPortFilter class DeviceBayViewSet(ModelViewSet): queryset = DeviceBay.objects.select_related('installed_device').prefetch_related('tags') serializer_class = serializers.DeviceBaySerializer - filter_class = filters.DeviceBayFilter + filterset_class = filters.DeviceBayFilter class InventoryItemViewSet(ModelViewSet): queryset = InventoryItem.objects.select_related('device', 'manufacturer').prefetch_related('tags') serializer_class = serializers.InventoryItemSerializer - filter_class = filters.InventoryItemFilter + filterset_class = filters.InventoryItemFilter # @@ -468,7 +468,7 @@ class ConsoleConnectionViewSet(ListModelMixin, GenericViewSet): connected_endpoint__isnull=False ) serializer_class = serializers.ConsolePortSerializer - filter_class = filters.ConsoleConnectionFilter + filterset_class = filters.ConsoleConnectionFilter class PowerConnectionViewSet(ListModelMixin, GenericViewSet): @@ -478,7 +478,7 @@ class PowerConnectionViewSet(ListModelMixin, GenericViewSet): connected_endpoint__isnull=False ) serializer_class = serializers.PowerPortSerializer - filter_class = filters.PowerConnectionFilter + filterset_class = filters.PowerConnectionFilter class InterfaceConnectionViewSet(ModelViewSet): @@ -490,7 +490,7 @@ class InterfaceConnectionViewSet(ModelViewSet): Q(_connected_circuittermination__isnull=False) ) serializer_class = serializers.InterfaceConnectionSerializer - filter_class = filters.InterfaceConnectionFilter + filterset_class = filters.InterfaceConnectionFilter # @@ -502,7 +502,7 @@ class CableViewSet(ModelViewSet): 'termination_a', 'termination_b' ) serializer_class = serializers.CableSerializer - filter_class = filters.CableFilter + filterset_class = filters.CableFilter # diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 5321e00b7..710ebb47d 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -27,7 +27,7 @@ class RegionFilter(django_filters.FilterSet): label='Parent region (ID)', ) parent = django_filters.ModelMultipleChoiceFilter( - name='parent__slug', + field_name='parent__slug', queryset=Region.objects.all(), to_field_name='slug', label='Parent region (slug)', @@ -48,7 +48,10 @@ class RegionFilter(django_filters.FilterSet): class SiteFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -62,7 +65,7 @@ class SiteFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Region (ID)', ) region = django_filters.ModelMultipleChoiceFilter( - name='region__slug', + field_name='region__slug', queryset=Region.objects.all(), to_field_name='slug', label='Region (slug)', @@ -72,13 +75,13 @@ class SiteFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -116,7 +119,7 @@ class RackGroupFilter(django_filters.FilterSet): label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', @@ -144,7 +147,10 @@ class RackRoleFilter(django_filters.FilterSet): class RackFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -155,7 +161,7 @@ class RackFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', @@ -165,7 +171,7 @@ class RackFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Group (ID)', ) group = django_filters.ModelMultipleChoiceFilter( - name='group__slug', + field_name='group__slug', queryset=RackGroup.objects.all(), to_field_name='slug', label='Group', @@ -175,7 +181,7 @@ class RackFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', @@ -189,14 +195,14 @@ class RackFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( - name='role__slug', + field_name='role__slug', queryset=RackRole.objects.all(), to_field_name='slug', label='Role (slug)', ) asset_tag = NullableCharFieldFilter() tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -219,7 +225,10 @@ class RackFilter(CustomFieldFilterSet, django_filters.FilterSet): class RackReservationFilter(django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -229,23 +238,23 @@ class RackReservationFilter(django_filters.FilterSet): label='Rack (ID)', ) site_id = django_filters.ModelMultipleChoiceFilter( - name='rack__site', + field_name='rack__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='rack__site__slug', + field_name='rack__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = django_filters.ModelMultipleChoiceFilter( - name='rack__group', + field_name='rack__group', queryset=RackGroup.objects.all(), label='Group (ID)', ) group = django_filters.ModelMultipleChoiceFilter( - name='rack__group__slug', + field_name='rack__group__slug', queryset=RackGroup.objects.all(), to_field_name='slug', label='Group', @@ -255,7 +264,7 @@ class RackReservationFilter(django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', @@ -265,7 +274,7 @@ class RackReservationFilter(django_filters.FilterSet): label='User (ID)', ) user = django_filters.ModelMultipleChoiceFilter( - name='user', + field_name='user', queryset=User.objects.all(), to_field_name='username', label='User (name)', @@ -294,7 +303,10 @@ class ManufacturerFilter(django_filters.FilterSet): class DeviceTypeFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -304,7 +316,7 @@ class DeviceTypeFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( - name='manufacturer__slug', + field_name='manufacturer__slug', queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', @@ -334,7 +346,7 @@ class DeviceTypeFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Has pass-through ports', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -384,7 +396,7 @@ class DeviceTypeFilter(CustomFieldFilterSet, django_filters.FilterSet): class DeviceTypeComponentFilterSet(django_filters.FilterSet): devicetype_id = django_filters.ModelMultipleChoiceFilter( queryset=DeviceType.objects.all(), - name='device_type_id', + field_name='device_type_id', label='Device type (ID)', ) @@ -454,12 +466,12 @@ class DeviceRoleFilter(django_filters.FilterSet): class PlatformFilter(django_filters.FilterSet): manufacturer_id = django_filters.ModelMultipleChoiceFilter( - name='manufacturer', + field_name='manufacturer', queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( - name='manufacturer__slug', + field_name='manufacturer__slug', queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', @@ -471,18 +483,21 @@ class PlatformFilter(django_filters.FilterSet): class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( - name='device_type__manufacturer', + field_name='device_type__manufacturer', queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( - name='device_type__manufacturer__slug', + field_name='device_type__manufacturer__slug', queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', @@ -492,12 +507,12 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Device type (ID)', ) role_id = django_filters.ModelMultipleChoiceFilter( - name='device_role_id', + field_name='device_role_id', queryset=DeviceRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( - name='device_role__slug', + field_name='device_role__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', @@ -507,7 +522,7 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', @@ -517,7 +532,7 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Platform (ID)', ) platform = django_filters.ModelMultipleChoiceFilter( - name='platform__slug', + field_name='platform__slug', queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', @@ -529,18 +544,18 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) rack_group_id = django_filters.ModelMultipleChoiceFilter( - name='rack__group', + field_name='rack__group', queryset=RackGroup.objects.all(), label='Rack group (ID)', ) rack_id = django_filters.ModelMultipleChoiceFilter( - name='rack', + field_name='rack', queryset=Rack.objects.all(), label='Rack (ID)', ) @@ -549,7 +564,7 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): label='VM cluster (ID)', ) model = django_filters.ModelMultipleChoiceFilter( - name='device_type__slug', + field_name='device_type__slug', queryset=DeviceType.objects.all(), to_field_name='slug', label='Device model (slug)', @@ -559,7 +574,7 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): null_value=None ) is_full_depth = django_filters.BooleanFilter( - name='device_type__is_full_depth', + field_name='device_type__is_full_depth', label='Is full depth', ) console_ports = django_filters.CharFilter( @@ -595,12 +610,12 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Has a primary IP', ) virtual_chassis_id = django_filters.ModelMultipleChoiceFilter( - name='virtual_chassis', + field_name='virtual_chassis', queryset=VirtualChassis.objects.all(), label='Virtual chassis (ID)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -679,7 +694,7 @@ class DeviceComponentFilterSet(django_filters.FilterSet): label='Device (name)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) @@ -718,12 +733,12 @@ class InterfaceFilter(django_filters.FilterSet): """ device = django_filters.CharFilter( method='filter_device', - name='name', + field_name='name', label='Device', ) device_id = django_filters.NumberFilter( method='filter_device', - name='pk', + field_name='pk', label='Device (ID)', ) type = django_filters.CharFilter( @@ -731,7 +746,7 @@ class InterfaceFilter(django_filters.FilterSet): label='Interface type', ) lag_id = django_filters.ModelMultipleChoiceFilter( - name='lag', + field_name='lag', queryset=Interface.objects.all(), label='LAG interface (ID)', ) @@ -740,7 +755,7 @@ class InterfaceFilter(django_filters.FilterSet): label='MAC address', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -811,7 +826,7 @@ class InventoryItemFilter(DeviceComponentFilterSet): label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( - name='manufacturer__slug', + field_name='manufacturer__slug', queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', @@ -841,29 +856,29 @@ class VirtualChassisFilter(django_filters.FilterSet): label='Search', ) site_id = django_filters.ModelMultipleChoiceFilter( - name='master__site', + field_name='master__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='master__site__slug', + field_name='master__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) tenant_id = django_filters.ModelMultipleChoiceFilter( - name='master__tenant', + field_name='master__tenant', queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='master__tenant__slug', + field_name='master__tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: diff --git a/netbox/extras/api/views.py b/netbox/extras/api/views.py index 1a91d069b..aebbb3620 100644 --- a/netbox/extras/api/views.py +++ b/netbox/extras/api/views.py @@ -69,7 +69,7 @@ class CustomFieldModelViewSet(ModelViewSet): class GraphViewSet(ModelViewSet): queryset = Graph.objects.all() serializer_class = serializers.GraphSerializer - filter_class = filters.GraphFilter + filterset_class = filters.GraphFilter # @@ -79,7 +79,7 @@ class GraphViewSet(ModelViewSet): class ExportTemplateViewSet(ModelViewSet): queryset = ExportTemplate.objects.all() serializer_class = serializers.ExportTemplateSerializer - filter_class = filters.ExportTemplateFilter + filterset_class = filters.ExportTemplateFilter # @@ -89,7 +89,7 @@ class ExportTemplateViewSet(ModelViewSet): class TopologyMapViewSet(ModelViewSet): queryset = TopologyMap.objects.select_related('site') serializer_class = serializers.TopologyMapSerializer - filter_class = filters.TopologyMapFilter + filterset_class = filters.TopologyMapFilter @action(detail=True) def render(self, request, pk): @@ -118,7 +118,7 @@ class TopologyMapViewSet(ModelViewSet): class TagViewSet(ModelViewSet): queryset = Tag.objects.annotate(tagged_items=Count('taggit_taggeditem_items')) serializer_class = serializers.TagSerializer - filter_class = filters.TagFilter + filterset_class = filters.TagFilter # @@ -139,7 +139,7 @@ class ConfigContextViewSet(ModelViewSet): 'regions', 'sites', 'roles', 'platforms', 'tenant_groups', 'tenants', ) serializer_class = serializers.ConfigContextSerializer - filter_class = filters.ConfigContextFilter + filterset_class = filters.ConfigContextFilter # @@ -228,4 +228,4 @@ class ObjectChangeViewSet(ReadOnlyModelViewSet): """ queryset = ObjectChange.objects.select_related('user') serializer_class = serializers.ObjectChangeSerializer - filter_class = filters.ObjectChangeFilter + filterset_class = filters.ObjectChangeFilter diff --git a/netbox/extras/filters.py b/netbox/extras/filters.py index b73eb8981..c7ad882f3 100644 --- a/netbox/extras/filters.py +++ b/netbox/extras/filters.py @@ -22,7 +22,7 @@ class CustomFieldFilter(django_filters.Filter): def filter(self, queryset, value): # Skip filter on empty value - if not value.strip(): + if value is None or not value.strip(): return queryset # Selection fields get special treatment (values must be integers) @@ -68,7 +68,7 @@ class CustomFieldFilterSet(django_filters.FilterSet): obj_type = ContentType.objects.get_for_model(self._meta.model) custom_fields = CustomField.objects.filter(obj_type=obj_type).exclude(filter_logic=CF_FILTER_DISABLED) for cf in custom_fields: - self.filters['cf_{}'.format(cf.name)] = CustomFieldFilter(name=cf.name, custom_field=cf) + self.filters['cf_{}'.format(cf.name)] = CustomFieldFilter(field_name=cf.name, custom_field=cf) class GraphFilter(django_filters.FilterSet): @@ -106,12 +106,12 @@ class TagFilter(django_filters.FilterSet): class TopologyMapFilter(django_filters.FilterSet): site_id = django_filters.ModelMultipleChoiceFilter( - name='site', + field_name='site', queryset=Site.objects.all(), label='Site', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', @@ -128,67 +128,67 @@ class ConfigContextFilter(django_filters.FilterSet): label='Search', ) region_id = django_filters.ModelMultipleChoiceFilter( - name='regions', + field_name='regions', queryset=Region.objects.all(), label='Region', ) region = django_filters.ModelMultipleChoiceFilter( - name='regions__slug', + field_name='regions__slug', queryset=Region.objects.all(), to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - name='sites', + field_name='sites', queryset=Site.objects.all(), label='Site', ) site = django_filters.ModelMultipleChoiceFilter( - name='sites__slug', + field_name='sites__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) role_id = django_filters.ModelMultipleChoiceFilter( - name='roles', + field_name='roles', queryset=DeviceRole.objects.all(), label='Role', ) role = django_filters.ModelMultipleChoiceFilter( - name='roles__slug', + field_name='roles__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) platform_id = django_filters.ModelMultipleChoiceFilter( - name='platforms', + field_name='platforms', queryset=Platform.objects.all(), label='Platform', ) platform = django_filters.ModelMultipleChoiceFilter( - name='platforms__slug', + field_name='platforms__slug', queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) tenant_group_id = django_filters.ModelMultipleChoiceFilter( - name='tenant_groups', + field_name='tenant_groups', queryset=TenantGroup.objects.all(), label='Tenant group', ) tenant_group = django_filters.ModelMultipleChoiceFilter( - name='tenant_groups__slug', + field_name='tenant_groups__slug', queryset=TenantGroup.objects.all(), to_field_name='slug', label='Tenant group (slug)', ) tenant_id = django_filters.ModelMultipleChoiceFilter( - name='tenants', + field_name='tenants', queryset=Tenant.objects.all(), label='Tenant', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenants__slug', + field_name='tenants__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index bf0e4d371..814339f61 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -33,7 +33,7 @@ class IPAMFieldChoicesViewSet(FieldChoicesViewSet): class VRFViewSet(CustomFieldModelViewSet): queryset = VRF.objects.select_related('tenant').prefetch_related('tags') serializer_class = serializers.VRFSerializer - filter_class = filters.VRFFilter + filterset_class = filters.VRFFilter # @@ -43,7 +43,7 @@ class VRFViewSet(CustomFieldModelViewSet): class RIRViewSet(ModelViewSet): queryset = RIR.objects.all() serializer_class = serializers.RIRSerializer - filter_class = filters.RIRFilter + filterset_class = filters.RIRFilter # @@ -53,7 +53,7 @@ class RIRViewSet(ModelViewSet): class AggregateViewSet(CustomFieldModelViewSet): queryset = Aggregate.objects.select_related('rir').prefetch_related('tags') serializer_class = serializers.AggregateSerializer - filter_class = filters.AggregateFilter + filterset_class = filters.AggregateFilter # @@ -63,7 +63,7 @@ class AggregateViewSet(CustomFieldModelViewSet): class RoleViewSet(ModelViewSet): queryset = Role.objects.all() serializer_class = serializers.RoleSerializer - filter_class = filters.RoleFilter + filterset_class = filters.RoleFilter # @@ -73,7 +73,7 @@ class RoleViewSet(ModelViewSet): class PrefixViewSet(CustomFieldModelViewSet): queryset = Prefix.objects.select_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role').prefetch_related('tags') serializer_class = serializers.PrefixSerializer - filter_class = filters.PrefixFilter + filterset_class = filters.PrefixFilter @action(detail=True, url_path='available-prefixes', methods=['get', 'post']) def available_prefixes(self, request, pk=None): @@ -246,7 +246,7 @@ class IPAddressViewSet(CustomFieldModelViewSet): 'nat_outside', 'tags', ) serializer_class = serializers.IPAddressSerializer - filter_class = filters.IPAddressFilter + filterset_class = filters.IPAddressFilter # @@ -256,7 +256,7 @@ class IPAddressViewSet(CustomFieldModelViewSet): class VLANGroupViewSet(ModelViewSet): queryset = VLANGroup.objects.select_related('site') serializer_class = serializers.VLANGroupSerializer - filter_class = filters.VLANGroupFilter + filterset_class = filters.VLANGroupFilter # @@ -266,7 +266,7 @@ class VLANGroupViewSet(ModelViewSet): class VLANViewSet(CustomFieldModelViewSet): queryset = VLAN.objects.select_related('site', 'group', 'tenant', 'role').prefetch_related('tags') serializer_class = serializers.VLANSerializer - filter_class = filters.VLANFilter + filterset_class = filters.VLANFilter # @@ -276,4 +276,4 @@ class VLANViewSet(CustomFieldModelViewSet): class ServiceViewSet(ModelViewSet): queryset = Service.objects.select_related('device').prefetch_related('tags') serializer_class = serializers.ServiceSerializer - filter_class = filters.ServiceFilter + filterset_class = filters.ServiceFilter diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index 5351d0861..9749d0630 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -14,7 +14,10 @@ from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLAN class VRFFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -24,13 +27,13 @@ class VRFFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) def search(self, queryset, name, value): @@ -48,7 +51,10 @@ class VRFFilter(CustomFieldFilterSet, django_filters.FilterSet): class RIRFilter(django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) class Meta: model = RIR @@ -56,7 +62,10 @@ class RIRFilter(django_filters.FilterSet): class AggregateFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -66,13 +75,13 @@ class AggregateFilter(CustomFieldFilterSet, django_filters.FilterSet): label='RIR (ID)', ) rir = django_filters.ModelMultipleChoiceFilter( - name='rir__slug', + field_name='rir__slug', queryset=RIR.objects.all(), to_field_name='slug', label='RIR (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -99,7 +108,10 @@ class RoleFilter(django_filters.FilterSet): class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -125,7 +137,7 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): label='VRF', ) vrf = django_filters.ModelMultipleChoiceFilter( - name='vrf__rd', + field_name='vrf__rd', queryset=VRF.objects.all(), to_field_name='rd', label='VRF (RD)', @@ -135,7 +147,7 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', @@ -145,7 +157,7 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', @@ -155,7 +167,7 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): label='VLAN (ID)', ) vlan_vid = django_filters.NumberFilter( - name='vlan__vid', + field_name='vlan__vid', label='VLAN number (1-4095)', ) role_id = django_filters.ModelMultipleChoiceFilter( @@ -163,7 +175,7 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( - name='role__slug', + field_name='role__slug', queryset=Role.objects.all(), to_field_name='slug', label='Role (slug)', @@ -173,7 +185,7 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): null_value=None ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -232,7 +244,10 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet): class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -254,7 +269,7 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): label='VRF', ) vrf = django_filters.ModelMultipleChoiceFilter( - name='vrf__rd', + field_name='vrf__rd', queryset=VRF.objects.all(), to_field_name='rd', label='VRF (RD)', @@ -264,28 +279,28 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) device = django_filters.CharFilter( method='filter_device', - name='name', + field_name='name', label='Device', ) device_id = django_filters.NumberFilter( method='filter_device', - name='pk', + field_name='pk', label='Device (ID)', ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( - name='interface__virtual_machine', + field_name='interface__virtual_machine', queryset=VirtualMachine.objects.all(), label='Virtual machine (ID)', ) virtual_machine = django_filters.ModelMultipleChoiceFilter( - name='interface__virtual_machine__name', + field_name='interface__virtual_machine__name', queryset=VirtualMachine.objects.all(), to_field_name='name', label='Virtual machine (name)', @@ -302,7 +317,7 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet): choices=IPADDRESS_ROLE_CHOICES ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -359,7 +374,7 @@ class VLANGroupFilter(django_filters.FilterSet): label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', @@ -371,7 +386,10 @@ class VLANGroupFilter(django_filters.FilterSet): class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -381,7 +399,7 @@ class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', @@ -391,7 +409,7 @@ class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Group (ID)', ) group = django_filters.ModelMultipleChoiceFilter( - name='group__slug', + field_name='group__slug', queryset=VLANGroup.objects.all(), to_field_name='slug', label='Group', @@ -401,7 +419,7 @@ class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', @@ -411,7 +429,7 @@ class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( - name='role__slug', + field_name='role__slug', queryset=Role.objects.all(), to_field_name='slug', label='Role (slug)', @@ -421,7 +439,7 @@ class VLANFilter(CustomFieldFilterSet, django_filters.FilterSet): null_value=None ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -449,7 +467,7 @@ class ServiceFilter(django_filters.FilterSet): label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( - name='device__name', + field_name='device__name', queryset=Device.objects.all(), to_field_name='name', label='Device (name)', @@ -459,13 +477,13 @@ class ServiceFilter(django_filters.FilterSet): label='Virtual machine (ID)', ) virtual_machine = django_filters.ModelMultipleChoiceFilter( - name='virtual_machine__name', + field_name='virtual_machine__name', queryset=VirtualMachine.objects.all(), to_field_name='name', label='Virtual machine (name)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: diff --git a/netbox/secrets/api/views.py b/netbox/secrets/api/views.py index 2c23493b7..970e1e20d 100644 --- a/netbox/secrets/api/views.py +++ b/netbox/secrets/api/views.py @@ -35,7 +35,7 @@ class SecretRoleViewSet(ModelViewSet): queryset = SecretRole.objects.all() serializer_class = serializers.SecretRoleSerializer permission_classes = [IsAuthenticated] - filter_class = filters.SecretRoleFilter + filterset_class = filters.SecretRoleFilter # @@ -49,7 +49,7 @@ class SecretViewSet(ModelViewSet): 'role__users', 'role__groups', 'tags', ) serializer_class = serializers.SecretSerializer - filter_class = filters.SecretFilter + filterset_class = filters.SecretFilter master_key = None diff --git a/netbox/secrets/filters.py b/netbox/secrets/filters.py index 1a0a28f06..79ae3a115 100644 --- a/netbox/secrets/filters.py +++ b/netbox/secrets/filters.py @@ -15,7 +15,10 @@ class SecretRoleFilter(django_filters.FilterSet): class SecretFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -25,7 +28,7 @@ class SecretFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( - name='role__slug', + field_name='role__slug', queryset=SecretRole.objects.all(), to_field_name='slug', label='Role (slug)', @@ -35,13 +38,13 @@ class SecretFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( - name='device__name', + field_name='device__name', queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: diff --git a/netbox/tenancy/api/views.py b/netbox/tenancy/api/views.py index b47a0cd63..af3e318fc 100644 --- a/netbox/tenancy/api/views.py +++ b/netbox/tenancy/api/views.py @@ -20,7 +20,7 @@ class TenancyFieldChoicesViewSet(FieldChoicesViewSet): class TenantGroupViewSet(ModelViewSet): queryset = TenantGroup.objects.all() serializer_class = serializers.TenantGroupSerializer - filter_class = filters.TenantGroupFilter + filterset_class = filters.TenantGroupFilter # @@ -30,4 +30,4 @@ class TenantGroupViewSet(ModelViewSet): class TenantViewSet(CustomFieldModelViewSet): queryset = Tenant.objects.select_related('group').prefetch_related('tags') serializer_class = serializers.TenantSerializer - filter_class = filters.TenantFilter + filterset_class = filters.TenantFilter diff --git a/netbox/tenancy/filters.py b/netbox/tenancy/filters.py index 4b92cd6f5..e2bfd6632 100644 --- a/netbox/tenancy/filters.py +++ b/netbox/tenancy/filters.py @@ -14,7 +14,10 @@ class TenantGroupFilter(django_filters.FilterSet): class TenantFilter(CustomFieldFilterSet, django_filters.FilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -24,13 +27,13 @@ class TenantFilter(CustomFieldFilterSet, django_filters.FilterSet): label='Group (ID)', ) group = django_filters.ModelMultipleChoiceFilter( - name='group__slug', + field_name='group__slug', queryset=TenantGroup.objects.all(), to_field_name='slug', label='Group (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: diff --git a/netbox/virtualization/api/views.py b/netbox/virtualization/api/views.py index 5f44287d5..3b0c02b22 100644 --- a/netbox/virtualization/api/views.py +++ b/netbox/virtualization/api/views.py @@ -23,19 +23,19 @@ class VirtualizationFieldChoicesViewSet(FieldChoicesViewSet): class ClusterTypeViewSet(ModelViewSet): queryset = ClusterType.objects.all() serializer_class = serializers.ClusterTypeSerializer - filter_class = filters.ClusterTypeFilter + filterset_class = filters.ClusterTypeFilter class ClusterGroupViewSet(ModelViewSet): queryset = ClusterGroup.objects.all() serializer_class = serializers.ClusterGroupSerializer - filter_class = filters.ClusterGroupFilter + filterset_class = filters.ClusterGroupFilter class ClusterViewSet(CustomFieldModelViewSet): queryset = Cluster.objects.select_related('type', 'group').prefetch_related('tags') serializer_class = serializers.ClusterSerializer - filter_class = filters.ClusterFilter + filterset_class = filters.ClusterFilter # @@ -46,7 +46,7 @@ class VirtualMachineViewSet(CustomFieldModelViewSet): queryset = VirtualMachine.objects.select_related( 'cluster__site', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6' ).prefetch_related('tags') - filter_class = filters.VirtualMachineFilter + filterset_class = filters.VirtualMachineFilter def get_serializer_class(self): """ @@ -67,7 +67,7 @@ class InterfaceViewSet(ModelViewSet): virtual_machine__isnull=False ).select_related('virtual_machine').prefetch_related('tags') serializer_class = serializers.InterfaceSerializer - filter_class = filters.InterfaceFilter + filterset_class = filters.InterfaceFilter def get_serializer_class(self): request = self.get_serializer_context()['request'] diff --git a/netbox/virtualization/filters.py b/netbox/virtualization/filters.py index 268094be7..cc61569f5 100644 --- a/netbox/virtualization/filters.py +++ b/netbox/virtualization/filters.py @@ -26,7 +26,10 @@ class ClusterGroupFilter(django_filters.FilterSet): class ClusterFilter(CustomFieldFilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -36,7 +39,7 @@ class ClusterFilter(CustomFieldFilterSet): label='Parent group (ID)', ) group = django_filters.ModelMultipleChoiceFilter( - name='group__slug', + field_name='group__slug', queryset=ClusterGroup.objects.all(), to_field_name='slug', label='Parent group (slug)', @@ -46,7 +49,7 @@ class ClusterFilter(CustomFieldFilterSet): label='Cluster type (ID)', ) type = django_filters.ModelMultipleChoiceFilter( - name='type__slug', + field_name='type__slug', queryset=ClusterType.objects.all(), to_field_name='slug', label='Cluster type (slug)', @@ -56,13 +59,13 @@ class ClusterFilter(CustomFieldFilterSet): label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='site__slug', + field_name='site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -79,7 +82,10 @@ class ClusterFilter(CustomFieldFilterSet): class VirtualMachineFilter(CustomFieldFilterSet): - id__in = NumericInFilter(name='id', lookup_expr='in') + id__in = NumericInFilter( + field_name='id', + lookup_expr='in' + ) q = django_filters.CharFilter( method='search', label='Search', @@ -89,23 +95,23 @@ class VirtualMachineFilter(CustomFieldFilterSet): null_value=None ) cluster_group_id = django_filters.ModelMultipleChoiceFilter( - name='cluster__group', + field_name='cluster__group', queryset=ClusterGroup.objects.all(), label='Cluster group (ID)', ) cluster_group = django_filters.ModelMultipleChoiceFilter( - name='cluster__group__slug', + field_name='cluster__group__slug', queryset=ClusterGroup.objects.all(), to_field_name='slug', label='Cluster group (slug)', ) cluster_type_id = django_filters.ModelMultipleChoiceFilter( - name='cluster__type', + field_name='cluster__type', queryset=ClusterType.objects.all(), label='Cluster type (ID)', ) cluster_type = django_filters.ModelMultipleChoiceFilter( - name='cluster__type__slug', + field_name='cluster__type__slug', queryset=ClusterType.objects.all(), to_field_name='slug', label='Cluster type (slug)', @@ -115,12 +121,12 @@ class VirtualMachineFilter(CustomFieldFilterSet): label='Cluster (ID)', ) site_id = django_filters.ModelMultipleChoiceFilter( - name='cluster__site', + field_name='cluster__site', queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( - name='cluster__site__slug', + field_name='cluster__site__slug', queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', @@ -130,7 +136,7 @@ class VirtualMachineFilter(CustomFieldFilterSet): label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( - name='role__slug', + field_name='role__slug', queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', @@ -140,7 +146,7 @@ class VirtualMachineFilter(CustomFieldFilterSet): label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - name='tenant__slug', + field_name='tenant__slug', queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', @@ -150,13 +156,13 @@ class VirtualMachineFilter(CustomFieldFilterSet): label='Platform (ID)', ) platform = django_filters.ModelMultipleChoiceFilter( - name='platform__slug', + field_name='platform__slug', queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) tag = django_filters.CharFilter( - name='tags__slug', + field_name='tags__slug', ) class Meta: @@ -174,12 +180,12 @@ class VirtualMachineFilter(CustomFieldFilterSet): class InterfaceFilter(django_filters.FilterSet): virtual_machine_id = django_filters.ModelMultipleChoiceFilter( - name='virtual_machine', + field_name='virtual_machine', queryset=VirtualMachine.objects.all(), label='Virtual machine (ID)', ) virtual_machine = django_filters.ModelMultipleChoiceFilter( - name='virtual_machine__name', + field_name='virtual_machine__name', queryset=VirtualMachine.objects.all(), to_field_name='name', label='Virtual machine', diff --git a/requirements.txt b/requirements.txt index 4d1c3567e..25f84c9f0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,13 @@ Django>=2.0,<2.1 django-cors-headers==2.4.0 django-debug-toolbar==1.9.1 -django-filter==1.1.0 +django-filter==2.0.0 django-mptt==0.9.1 django-tables2==1.21.2 django-taggit==0.22.2 django-taggit-serializer==0.1.7 django-timezone-field==2.1 -djangorestframework==3.8.2 +djangorestframework==3.9.0 drf-yasg[validation]==1.9.2 graphviz==0.8.4 Markdown==2.6.11