Просмотр исходного кода

Merge pull request #3881 from netbox-community/3729-filterset-naming

Fixes #3729: Standardize FilterSet names
Jeremy Stretch 6 лет назад
Родитель
Сommit
03b22594e8

+ 4 - 4
netbox/circuits/api/views.py

@@ -32,7 +32,7 @@ class ProviderViewSet(CustomFieldModelViewSet):
         circuit_count=Count('circuits')
         circuit_count=Count('circuits')
     )
     )
     serializer_class = serializers.ProviderSerializer
     serializer_class = serializers.ProviderSerializer
-    filterset_class = filters.ProviderFilter
+    filterset_class = filters.ProviderFilterSet
 
 
     @action(detail=True)
     @action(detail=True)
     def graphs(self, request, pk):
     def graphs(self, request, pk):
@@ -54,7 +54,7 @@ class CircuitTypeViewSet(ModelViewSet):
         circuit_count=Count('circuits')
         circuit_count=Count('circuits')
     )
     )
     serializer_class = serializers.CircuitTypeSerializer
     serializer_class = serializers.CircuitTypeSerializer
-    filterset_class = filters.CircuitTypeFilter
+    filterset_class = filters.CircuitTypeFilterSet
 
 
 
 
 #
 #
@@ -64,7 +64,7 @@ class CircuitTypeViewSet(ModelViewSet):
 class CircuitViewSet(CustomFieldModelViewSet):
 class CircuitViewSet(CustomFieldModelViewSet):
     queryset = Circuit.objects.prefetch_related('type', 'tenant', 'provider').prefetch_related('tags')
     queryset = Circuit.objects.prefetch_related('type', 'tenant', 'provider').prefetch_related('tags')
     serializer_class = serializers.CircuitSerializer
     serializer_class = serializers.CircuitSerializer
-    filterset_class = filters.CircuitFilter
+    filterset_class = filters.CircuitFilterSet
 
 
 
 
 #
 #
@@ -76,4 +76,4 @@ class CircuitTerminationViewSet(ModelViewSet):
         'circuit', 'site', 'connected_endpoint__device', 'cable'
         'circuit', 'site', 'connected_endpoint__device', 'cable'
     )
     )
     serializer_class = serializers.CircuitTerminationSerializer
     serializer_class = serializers.CircuitTerminationSerializer
-    filterset_class = filters.CircuitTerminationFilter
+    filterset_class = filters.CircuitTerminationFilterSet

+ 9 - 9
netbox/circuits/filters.py

@@ -3,20 +3,20 @@ from django.db.models import Q
 
 
 from dcim.models import Region, Site
 from dcim.models import Region, Site
 from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
 from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
-from tenancy.filtersets import TenancyFilterSet
+from tenancy.filters import TenancyFilterSet
 from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
 from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
 from .choices import *
 from .choices import *
 from .models import Circuit, CircuitTermination, CircuitType, Provider
 from .models import Circuit, CircuitTermination, CircuitType, Provider
 
 
 __all__ = (
 __all__ = (
-    'CircuitFilter',
-    'CircuitTerminationFilter',
-    'CircuitTypeFilter',
-    'ProviderFilter',
+    'CircuitFilterSet',
+    'CircuitTerminationFilterSet',
+    'CircuitTypeFilterSet',
+    'ProviderFilterSet',
 )
 )
 
 
 
 
-class ProviderFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class ProviderFilterSet(CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -65,14 +65,14 @@ class ProviderFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
         )
         )
 
 
 
 
-class CircuitTypeFilter(NameSlugSearchFilterSet):
+class CircuitTypeFilterSet(NameSlugSearchFilterSet):
 
 
     class Meta:
     class Meta:
         model = CircuitType
         model = CircuitType
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class CircuitFilter(CustomFieldFilterSet, TenancyFilterSet, CreatedUpdatedFilterSet):
+class CircuitFilterSet(CustomFieldFilterSet, TenancyFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -146,7 +146,7 @@ class CircuitFilter(CustomFieldFilterSet, TenancyFilterSet, CreatedUpdatedFilter
         ).distinct()
         ).distinct()
 
 
 
 
-class CircuitTerminationFilter(django_filters.FilterSet):
+class CircuitTerminationFilterSet(django_filters.FilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',

+ 4 - 4
netbox/circuits/tests/test_filters.py

@@ -8,7 +8,7 @@ from dcim.models import Region, Site
 
 
 class ProviderTestCase(TestCase):
 class ProviderTestCase(TestCase):
     queryset = Provider.objects.all()
     queryset = Provider.objects.all()
-    filterset = ProviderFilter
+    filterset = ProviderFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -91,7 +91,7 @@ class ProviderTestCase(TestCase):
 
 
 class CircuitTypeTestCase(TestCase):
 class CircuitTypeTestCase(TestCase):
     queryset = CircuitType.objects.all()
     queryset = CircuitType.objects.all()
-    filterset = CircuitTypeFilter
+    filterset = CircuitTypeFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -117,7 +117,7 @@ class CircuitTypeTestCase(TestCase):
 
 
 class CircuitTestCase(TestCase):
 class CircuitTestCase(TestCase):
     queryset = Circuit.objects.all()
     queryset = Circuit.objects.all()
-    filterset = CircuitFilter
+    filterset = CircuitFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -219,7 +219,7 @@ class CircuitTestCase(TestCase):
 
 
 class CircuitTerminationTestCase(TestCase):
 class CircuitTerminationTestCase(TestCase):
     queryset = CircuitTermination.objects.all()
     queryset = CircuitTermination.objects.all()
-    filterset = CircuitTerminationFilter
+    filterset = CircuitTerminationFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):

+ 8 - 8
netbox/circuits/views.py

@@ -23,8 +23,8 @@ from .models import Circuit, CircuitTermination, CircuitType, Provider
 class ProviderListView(PermissionRequiredMixin, ObjectListView):
 class ProviderListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'circuits.view_provider'
     permission_required = 'circuits.view_provider'
     queryset = Provider.objects.annotate(count_circuits=Count('circuits'))
     queryset = Provider.objects.annotate(count_circuits=Count('circuits'))
-    filter = filters.ProviderFilter
-    filter_form = forms.ProviderFilterForm
+    filterset = filters.ProviderFilterSet
+    filterset_form = forms.ProviderFilterForm
     table = tables.ProviderDetailTable
     table = tables.ProviderDetailTable
     template_name = 'circuits/provider_list.html'
     template_name = 'circuits/provider_list.html'
 
 
@@ -73,7 +73,7 @@ class ProviderBulkImportView(PermissionRequiredMixin, BulkImportView):
 class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView):
 class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'circuits.change_provider'
     permission_required = 'circuits.change_provider'
     queryset = Provider.objects.all()
     queryset = Provider.objects.all()
-    filter = filters.ProviderFilter
+    filterset = filters.ProviderFilterSet
     table = tables.ProviderTable
     table = tables.ProviderTable
     form = forms.ProviderBulkEditForm
     form = forms.ProviderBulkEditForm
     default_return_url = 'circuits:provider_list'
     default_return_url = 'circuits:provider_list'
@@ -82,7 +82,7 @@ class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView):
 class ProviderBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class ProviderBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'circuits.delete_provider'
     permission_required = 'circuits.delete_provider'
     queryset = Provider.objects.all()
     queryset = Provider.objects.all()
-    filter = filters.ProviderFilter
+    filterset = filters.ProviderFilterSet
     table = tables.ProviderTable
     table = tables.ProviderTable
     default_return_url = 'circuits:provider_list'
     default_return_url = 'circuits:provider_list'
 
 
@@ -136,8 +136,8 @@ class CircuitListView(PermissionRequiredMixin, ObjectListView):
         a_side=Subquery(_terminations.filter(term_side='A').values('site__name')[:1]),
         a_side=Subquery(_terminations.filter(term_side='A').values('site__name')[:1]),
         z_side=Subquery(_terminations.filter(term_side='Z').values('site__name')[:1]),
         z_side=Subquery(_terminations.filter(term_side='Z').values('site__name')[:1]),
     )
     )
-    filter = filters.CircuitFilter
-    filter_form = forms.CircuitFilterForm
+    filterset = filters.CircuitFilterSet
+    filterset_form = forms.CircuitFilterForm
     table = tables.CircuitTable
     table = tables.CircuitTable
     template_name = 'circuits/circuit_list.html'
     template_name = 'circuits/circuit_list.html'
 
 
@@ -194,7 +194,7 @@ class CircuitBulkImportView(PermissionRequiredMixin, BulkImportView):
 class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView):
 class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'circuits.change_circuit'
     permission_required = 'circuits.change_circuit'
     queryset = Circuit.objects.prefetch_related('provider', 'type', 'tenant').prefetch_related('terminations__site')
     queryset = Circuit.objects.prefetch_related('provider', 'type', 'tenant').prefetch_related('terminations__site')
-    filter = filters.CircuitFilter
+    filterset = filters.CircuitFilterSet
     table = tables.CircuitTable
     table = tables.CircuitTable
     form = forms.CircuitBulkEditForm
     form = forms.CircuitBulkEditForm
     default_return_url = 'circuits:circuit_list'
     default_return_url = 'circuits:circuit_list'
@@ -203,7 +203,7 @@ class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView):
 class CircuitBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class CircuitBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'circuits.delete_circuit'
     permission_required = 'circuits.delete_circuit'
     queryset = Circuit.objects.prefetch_related('provider', 'type', 'tenant').prefetch_related('terminations__site')
     queryset = Circuit.objects.prefetch_related('provider', 'type', 'tenant').prefetch_related('terminations__site')
-    filter = filters.CircuitFilter
+    filterset = filters.CircuitFilterSet
     table = tables.CircuitTable
     table = tables.CircuitTable
     default_return_url = 'circuits:circuit_list'
     default_return_url = 'circuits:circuit_list'
 
 

+ 35 - 35
netbox/dcim/api/views.py

@@ -106,7 +106,7 @@ class RegionViewSet(ModelViewSet):
         site_count=Count('sites')
         site_count=Count('sites')
     )
     )
     serializer_class = serializers.RegionSerializer
     serializer_class = serializers.RegionSerializer
-    filterset_class = filters.RegionFilter
+    filterset_class = filters.RegionFilterSet
 
 
 
 
 #
 #
@@ -125,7 +125,7 @@ class SiteViewSet(CustomFieldModelViewSet):
         virtualmachine_count=get_subquery(VirtualMachine, 'cluster__site'),
         virtualmachine_count=get_subquery(VirtualMachine, 'cluster__site'),
     )
     )
     serializer_class = serializers.SiteSerializer
     serializer_class = serializers.SiteSerializer
-    filterset_class = filters.SiteFilter
+    filterset_class = filters.SiteFilterSet
 
 
     @action(detail=True)
     @action(detail=True)
     def graphs(self, request, pk):
     def graphs(self, request, pk):
@@ -147,7 +147,7 @@ class RackGroupViewSet(ModelViewSet):
         rack_count=Count('racks')
         rack_count=Count('racks')
     )
     )
     serializer_class = serializers.RackGroupSerializer
     serializer_class = serializers.RackGroupSerializer
-    filterset_class = filters.RackGroupFilter
+    filterset_class = filters.RackGroupFilterSet
 
 
 
 
 #
 #
@@ -159,7 +159,7 @@ class RackRoleViewSet(ModelViewSet):
         rack_count=Count('racks')
         rack_count=Count('racks')
     )
     )
     serializer_class = serializers.RackRoleSerializer
     serializer_class = serializers.RackRoleSerializer
-    filterset_class = filters.RackRoleFilter
+    filterset_class = filters.RackRoleFilterSet
 
 
 
 
 #
 #
@@ -174,7 +174,7 @@ class RackViewSet(CustomFieldModelViewSet):
         powerfeed_count=get_subquery(PowerFeed, 'rack')
         powerfeed_count=get_subquery(PowerFeed, 'rack')
     )
     )
     serializer_class = serializers.RackSerializer
     serializer_class = serializers.RackSerializer
-    filterset_class = filters.RackFilter
+    filterset_class = filters.RackFilterSet
 
 
     @swagger_auto_schema(deprecated=True)
     @swagger_auto_schema(deprecated=True)
     @action(detail=True)
     @action(detail=True)
@@ -244,7 +244,7 @@ class RackViewSet(CustomFieldModelViewSet):
 class RackReservationViewSet(ModelViewSet):
 class RackReservationViewSet(ModelViewSet):
     queryset = RackReservation.objects.prefetch_related('rack', 'user', 'tenant')
     queryset = RackReservation.objects.prefetch_related('rack', 'user', 'tenant')
     serializer_class = serializers.RackReservationSerializer
     serializer_class = serializers.RackReservationSerializer
-    filterset_class = filters.RackReservationFilter
+    filterset_class = filters.RackReservationFilterSet
 
 
     # Assign user from request
     # Assign user from request
     def perform_create(self, serializer):
     def perform_create(self, serializer):
@@ -262,7 +262,7 @@ class ManufacturerViewSet(ModelViewSet):
         platform_count=get_subquery(Platform, 'manufacturer')
         platform_count=get_subquery(Platform, 'manufacturer')
     )
     )
     serializer_class = serializers.ManufacturerSerializer
     serializer_class = serializers.ManufacturerSerializer
-    filterset_class = filters.ManufacturerFilter
+    filterset_class = filters.ManufacturerFilterSet
 
 
 
 
 #
 #
@@ -274,7 +274,7 @@ class DeviceTypeViewSet(CustomFieldModelViewSet):
         device_count=Count('instances')
         device_count=Count('instances')
     )
     )
     serializer_class = serializers.DeviceTypeSerializer
     serializer_class = serializers.DeviceTypeSerializer
-    filterset_class = filters.DeviceTypeFilter
+    filterset_class = filters.DeviceTypeFilterSet
 
 
 
 
 #
 #
@@ -284,49 +284,49 @@ class DeviceTypeViewSet(CustomFieldModelViewSet):
 class ConsolePortTemplateViewSet(ModelViewSet):
 class ConsolePortTemplateViewSet(ModelViewSet):
     queryset = ConsolePortTemplate.objects.prefetch_related('device_type__manufacturer')
     queryset = ConsolePortTemplate.objects.prefetch_related('device_type__manufacturer')
     serializer_class = serializers.ConsolePortTemplateSerializer
     serializer_class = serializers.ConsolePortTemplateSerializer
-    filterset_class = filters.ConsolePortTemplateFilter
+    filterset_class = filters.ConsolePortTemplateFilterSet
 
 
 
 
 class ConsoleServerPortTemplateViewSet(ModelViewSet):
 class ConsoleServerPortTemplateViewSet(ModelViewSet):
     queryset = ConsoleServerPortTemplate.objects.prefetch_related('device_type__manufacturer')
     queryset = ConsoleServerPortTemplate.objects.prefetch_related('device_type__manufacturer')
     serializer_class = serializers.ConsoleServerPortTemplateSerializer
     serializer_class = serializers.ConsoleServerPortTemplateSerializer
-    filterset_class = filters.ConsoleServerPortTemplateFilter
+    filterset_class = filters.ConsoleServerPortTemplateFilterSet
 
 
 
 
 class PowerPortTemplateViewSet(ModelViewSet):
 class PowerPortTemplateViewSet(ModelViewSet):
     queryset = PowerPortTemplate.objects.prefetch_related('device_type__manufacturer')
     queryset = PowerPortTemplate.objects.prefetch_related('device_type__manufacturer')
     serializer_class = serializers.PowerPortTemplateSerializer
     serializer_class = serializers.PowerPortTemplateSerializer
-    filterset_class = filters.PowerPortTemplateFilter
+    filterset_class = filters.PowerPortTemplateFilterSet
 
 
 
 
 class PowerOutletTemplateViewSet(ModelViewSet):
 class PowerOutletTemplateViewSet(ModelViewSet):
     queryset = PowerOutletTemplate.objects.prefetch_related('device_type__manufacturer')
     queryset = PowerOutletTemplate.objects.prefetch_related('device_type__manufacturer')
     serializer_class = serializers.PowerOutletTemplateSerializer
     serializer_class = serializers.PowerOutletTemplateSerializer
-    filterset_class = filters.PowerOutletTemplateFilter
+    filterset_class = filters.PowerOutletTemplateFilterSet
 
 
 
 
 class InterfaceTemplateViewSet(ModelViewSet):
 class InterfaceTemplateViewSet(ModelViewSet):
     queryset = InterfaceTemplate.objects.prefetch_related('device_type__manufacturer')
     queryset = InterfaceTemplate.objects.prefetch_related('device_type__manufacturer')
     serializer_class = serializers.InterfaceTemplateSerializer
     serializer_class = serializers.InterfaceTemplateSerializer
-    filterset_class = filters.InterfaceTemplateFilter
+    filterset_class = filters.InterfaceTemplateFilterSet
 
 
 
 
 class FrontPortTemplateViewSet(ModelViewSet):
 class FrontPortTemplateViewSet(ModelViewSet):
     queryset = FrontPortTemplate.objects.prefetch_related('device_type__manufacturer')
     queryset = FrontPortTemplate.objects.prefetch_related('device_type__manufacturer')
     serializer_class = serializers.FrontPortTemplateSerializer
     serializer_class = serializers.FrontPortTemplateSerializer
-    filterset_class = filters.FrontPortTemplateFilter
+    filterset_class = filters.FrontPortTemplateFilterSet
 
 
 
 
 class RearPortTemplateViewSet(ModelViewSet):
 class RearPortTemplateViewSet(ModelViewSet):
     queryset = RearPortTemplate.objects.prefetch_related('device_type__manufacturer')
     queryset = RearPortTemplate.objects.prefetch_related('device_type__manufacturer')
     serializer_class = serializers.RearPortTemplateSerializer
     serializer_class = serializers.RearPortTemplateSerializer
-    filterset_class = filters.RearPortTemplateFilter
+    filterset_class = filters.RearPortTemplateFilterSet
 
 
 
 
 class DeviceBayTemplateViewSet(ModelViewSet):
 class DeviceBayTemplateViewSet(ModelViewSet):
     queryset = DeviceBayTemplate.objects.prefetch_related('device_type__manufacturer')
     queryset = DeviceBayTemplate.objects.prefetch_related('device_type__manufacturer')
     serializer_class = serializers.DeviceBayTemplateSerializer
     serializer_class = serializers.DeviceBayTemplateSerializer
-    filterset_class = filters.DeviceBayTemplateFilter
+    filterset_class = filters.DeviceBayTemplateFilterSet
 
 
 
 
 #
 #
@@ -339,7 +339,7 @@ class DeviceRoleViewSet(ModelViewSet):
         virtualmachine_count=get_subquery(VirtualMachine, 'role')
         virtualmachine_count=get_subquery(VirtualMachine, 'role')
     )
     )
     serializer_class = serializers.DeviceRoleSerializer
     serializer_class = serializers.DeviceRoleSerializer
-    filterset_class = filters.DeviceRoleFilter
+    filterset_class = filters.DeviceRoleFilterSet
 
 
 
 
 #
 #
@@ -352,7 +352,7 @@ class PlatformViewSet(ModelViewSet):
         virtualmachine_count=get_subquery(VirtualMachine, 'platform')
         virtualmachine_count=get_subquery(VirtualMachine, 'platform')
     )
     )
     serializer_class = serializers.PlatformSerializer
     serializer_class = serializers.PlatformSerializer
-    filterset_class = filters.PlatformFilter
+    filterset_class = filters.PlatformFilterSet
 
 
 
 
 #
 #
@@ -364,7 +364,7 @@ class DeviceViewSet(CustomFieldModelViewSet):
         'device_type__manufacturer', 'device_role', 'tenant', 'platform', 'site', 'rack', 'parent_bay',
         'device_type__manufacturer', 'device_role', 'tenant', 'platform', 'site', 'rack', 'parent_bay',
         'virtual_chassis__master', 'primary_ip4__nat_outside', 'primary_ip6__nat_outside', 'tags',
         'virtual_chassis__master', 'primary_ip4__nat_outside', 'primary_ip6__nat_outside', 'tags',
     )
     )
-    filterset_class = filters.DeviceFilter
+    filterset_class = filters.DeviceFilterSet
 
 
     def get_serializer_class(self):
     def get_serializer_class(self):
         """
         """
@@ -503,13 +503,13 @@ class DeviceViewSet(CustomFieldModelViewSet):
 class ConsolePortViewSet(CableTraceMixin, ModelViewSet):
 class ConsolePortViewSet(CableTraceMixin, ModelViewSet):
     queryset = ConsolePort.objects.prefetch_related('device', 'connected_endpoint__device', 'cable', 'tags')
     queryset = ConsolePort.objects.prefetch_related('device', 'connected_endpoint__device', 'cable', 'tags')
     serializer_class = serializers.ConsolePortSerializer
     serializer_class = serializers.ConsolePortSerializer
-    filterset_class = filters.ConsolePortFilter
+    filterset_class = filters.ConsolePortFilterSet
 
 
 
 
 class ConsoleServerPortViewSet(CableTraceMixin, ModelViewSet):
 class ConsoleServerPortViewSet(CableTraceMixin, ModelViewSet):
     queryset = ConsoleServerPort.objects.prefetch_related('device', 'connected_endpoint__device', 'cable', 'tags')
     queryset = ConsoleServerPort.objects.prefetch_related('device', 'connected_endpoint__device', 'cable', 'tags')
     serializer_class = serializers.ConsoleServerPortSerializer
     serializer_class = serializers.ConsoleServerPortSerializer
-    filterset_class = filters.ConsoleServerPortFilter
+    filterset_class = filters.ConsoleServerPortFilterSet
 
 
 
 
 class PowerPortViewSet(CableTraceMixin, ModelViewSet):
 class PowerPortViewSet(CableTraceMixin, ModelViewSet):
@@ -517,13 +517,13 @@ class PowerPortViewSet(CableTraceMixin, ModelViewSet):
         'device', '_connected_poweroutlet__device', '_connected_powerfeed', 'cable', 'tags'
         'device', '_connected_poweroutlet__device', '_connected_powerfeed', 'cable', 'tags'
     )
     )
     serializer_class = serializers.PowerPortSerializer
     serializer_class = serializers.PowerPortSerializer
-    filterset_class = filters.PowerPortFilter
+    filterset_class = filters.PowerPortFilterSet
 
 
 
 
 class PowerOutletViewSet(CableTraceMixin, ModelViewSet):
 class PowerOutletViewSet(CableTraceMixin, ModelViewSet):
     queryset = PowerOutlet.objects.prefetch_related('device', 'connected_endpoint__device', 'cable', 'tags')
     queryset = PowerOutlet.objects.prefetch_related('device', 'connected_endpoint__device', 'cable', 'tags')
     serializer_class = serializers.PowerOutletSerializer
     serializer_class = serializers.PowerOutletSerializer
-    filterset_class = filters.PowerOutletFilter
+    filterset_class = filters.PowerOutletFilterSet
 
 
 
 
 class InterfaceViewSet(CableTraceMixin, ModelViewSet):
 class InterfaceViewSet(CableTraceMixin, ModelViewSet):
@@ -533,7 +533,7 @@ class InterfaceViewSet(CableTraceMixin, ModelViewSet):
         device__isnull=False
         device__isnull=False
     )
     )
     serializer_class = serializers.InterfaceSerializer
     serializer_class = serializers.InterfaceSerializer
-    filterset_class = filters.InterfaceFilter
+    filterset_class = filters.InterfaceFilterSet
 
 
     @action(detail=True)
     @action(detail=True)
     def graphs(self, request, pk):
     def graphs(self, request, pk):
@@ -549,25 +549,25 @@ class InterfaceViewSet(CableTraceMixin, ModelViewSet):
 class FrontPortViewSet(ModelViewSet):
 class FrontPortViewSet(ModelViewSet):
     queryset = FrontPort.objects.prefetch_related('device__device_type__manufacturer', 'rear_port', 'cable', 'tags')
     queryset = FrontPort.objects.prefetch_related('device__device_type__manufacturer', 'rear_port', 'cable', 'tags')
     serializer_class = serializers.FrontPortSerializer
     serializer_class = serializers.FrontPortSerializer
-    filterset_class = filters.FrontPortFilter
+    filterset_class = filters.FrontPortFilterSet
 
 
 
 
 class RearPortViewSet(ModelViewSet):
 class RearPortViewSet(ModelViewSet):
     queryset = RearPort.objects.prefetch_related('device__device_type__manufacturer', 'cable', 'tags')
     queryset = RearPort.objects.prefetch_related('device__device_type__manufacturer', 'cable', 'tags')
     serializer_class = serializers.RearPortSerializer
     serializer_class = serializers.RearPortSerializer
-    filterset_class = filters.RearPortFilter
+    filterset_class = filters.RearPortFilterSet
 
 
 
 
 class DeviceBayViewSet(ModelViewSet):
 class DeviceBayViewSet(ModelViewSet):
     queryset = DeviceBay.objects.prefetch_related('installed_device').prefetch_related('tags')
     queryset = DeviceBay.objects.prefetch_related('installed_device').prefetch_related('tags')
     serializer_class = serializers.DeviceBaySerializer
     serializer_class = serializers.DeviceBaySerializer
-    filterset_class = filters.DeviceBayFilter
+    filterset_class = filters.DeviceBayFilterSet
 
 
 
 
 class InventoryItemViewSet(ModelViewSet):
 class InventoryItemViewSet(ModelViewSet):
     queryset = InventoryItem.objects.prefetch_related('device', 'manufacturer').prefetch_related('tags')
     queryset = InventoryItem.objects.prefetch_related('device', 'manufacturer').prefetch_related('tags')
     serializer_class = serializers.InventoryItemSerializer
     serializer_class = serializers.InventoryItemSerializer
-    filterset_class = filters.InventoryItemFilter
+    filterset_class = filters.InventoryItemFilterSet
 
 
 
 
 #
 #
@@ -581,7 +581,7 @@ class ConsoleConnectionViewSet(ListModelMixin, GenericViewSet):
         connected_endpoint__isnull=False
         connected_endpoint__isnull=False
     )
     )
     serializer_class = serializers.ConsolePortSerializer
     serializer_class = serializers.ConsolePortSerializer
-    filterset_class = filters.ConsoleConnectionFilter
+    filterset_class = filters.ConsoleConnectionFilterSet
 
 
 
 
 class PowerConnectionViewSet(ListModelMixin, GenericViewSet):
 class PowerConnectionViewSet(ListModelMixin, GenericViewSet):
@@ -591,7 +591,7 @@ class PowerConnectionViewSet(ListModelMixin, GenericViewSet):
         _connected_poweroutlet__isnull=False
         _connected_poweroutlet__isnull=False
     )
     )
     serializer_class = serializers.PowerPortSerializer
     serializer_class = serializers.PowerPortSerializer
-    filterset_class = filters.PowerConnectionFilter
+    filterset_class = filters.PowerConnectionFilterSet
 
 
 
 
 class InterfaceConnectionViewSet(ListModelMixin, GenericViewSet):
 class InterfaceConnectionViewSet(ListModelMixin, GenericViewSet):
@@ -603,7 +603,7 @@ class InterfaceConnectionViewSet(ListModelMixin, GenericViewSet):
         pk__lt=F('_connected_interface')
         pk__lt=F('_connected_interface')
     )
     )
     serializer_class = serializers.InterfaceConnectionSerializer
     serializer_class = serializers.InterfaceConnectionSerializer
-    filterset_class = filters.InterfaceConnectionFilter
+    filterset_class = filters.InterfaceConnectionFilterSet
 
 
 
 
 #
 #
@@ -615,7 +615,7 @@ class CableViewSet(ModelViewSet):
         'termination_a', 'termination_b'
         'termination_a', 'termination_b'
     )
     )
     serializer_class = serializers.CableSerializer
     serializer_class = serializers.CableSerializer
-    filterset_class = filters.CableFilter
+    filterset_class = filters.CableFilterSet
 
 
 
 
 #
 #
@@ -627,7 +627,7 @@ class VirtualChassisViewSet(ModelViewSet):
         member_count=Count('members')
         member_count=Count('members')
     )
     )
     serializer_class = serializers.VirtualChassisSerializer
     serializer_class = serializers.VirtualChassisSerializer
-    filterset_class = filters.VirtualChassisFilter
+    filterset_class = filters.VirtualChassisFilterSet
 
 
 
 
 #
 #
@@ -641,7 +641,7 @@ class PowerPanelViewSet(ModelViewSet):
         powerfeed_count=Count('powerfeeds')
         powerfeed_count=Count('powerfeeds')
     )
     )
     serializer_class = serializers.PowerPanelSerializer
     serializer_class = serializers.PowerPanelSerializer
-    filterset_class = filters.PowerPanelFilter
+    filterset_class = filters.PowerPanelFilterSet
 
 
 
 
 #
 #
@@ -651,7 +651,7 @@ class PowerPanelViewSet(ModelViewSet):
 class PowerFeedViewSet(CustomFieldModelViewSet):
 class PowerFeedViewSet(CustomFieldModelViewSet):
     queryset = PowerFeed.objects.prefetch_related('power_panel', 'rack', 'tags')
     queryset = PowerFeed.objects.prefetch_related('power_panel', 'rack', 'tags')
     serializer_class = serializers.PowerFeedSerializer
     serializer_class = serializers.PowerFeedSerializer
-    filterset_class = filters.PowerFeedFilter
+    filterset_class = filters.PowerFeedFilterSet
 
 
 
 
 #
 #

+ 72 - 72
netbox/dcim/filters.py

@@ -2,8 +2,8 @@ import django_filters
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.db.models import Q
 from django.db.models import Q
 
 
-from extras.filters import CustomFieldFilterSet, LocalConfigContextFilter, CreatedUpdatedFilterSet
-from tenancy.filtersets import TenancyFilterSet
+from extras.filters import CustomFieldFilterSet, LocalConfigContextFilterSet, CreatedUpdatedFilterSet
+from tenancy.filters import TenancyFilterSet
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from utilities.constants import COLOR_CHOICES
 from utilities.constants import COLOR_CHOICES
 from utilities.filters import (
 from utilities.filters import (
@@ -23,45 +23,45 @@ from .models import (
 
 
 
 
 __all__ = (
 __all__ = (
-    'CableFilter',
-    'ConsoleConnectionFilter',
-    'ConsolePortFilter',
-    'ConsolePortTemplateFilter',
-    'ConsoleServerPortFilter',
-    'ConsoleServerPortTemplateFilter',
-    'DeviceBayFilter',
-    'DeviceBayTemplateFilter',
-    'DeviceFilter',
-    'DeviceRoleFilter',
-    'DeviceTypeFilter',
-    'FrontPortFilter',
-    'FrontPortTemplateFilter',
-    'InterfaceConnectionFilter',
-    'InterfaceFilter',
-    'InterfaceTemplateFilter',
-    'InventoryItemFilter',
-    'ManufacturerFilter',
-    'PlatformFilter',
-    'PowerConnectionFilter',
-    'PowerFeedFilter',
-    'PowerOutletFilter',
-    'PowerOutletTemplateFilter',
-    'PowerPanelFilter',
-    'PowerPortFilter',
-    'PowerPortTemplateFilter',
-    'RackFilter',
-    'RackGroupFilter',
-    'RackReservationFilter',
-    'RackRoleFilter',
-    'RearPortFilter',
-    'RearPortTemplateFilter',
-    'RegionFilter',
-    'SiteFilter',
-    'VirtualChassisFilter',
+    'CableFilterSet',
+    'ConsoleConnectionFilterSet',
+    'ConsolePortFilterSet',
+    'ConsolePortTemplateFilterSet',
+    'ConsoleServerPortFilterSet',
+    'ConsoleServerPortTemplateFilterSet',
+    'DeviceBayFilterSet',
+    'DeviceBayTemplateFilterSet',
+    'DeviceFilterSet',
+    'DeviceRoleFilterSet',
+    'DeviceTypeFilterSet',
+    'FrontPortFilterSet',
+    'FrontPortTemplateFilterSet',
+    'InterfaceConnectionFilterSet',
+    'InterfaceFilterSet',
+    'InterfaceTemplateFilterSet',
+    'InventoryItemFilterSet',
+    'ManufacturerFilterSet',
+    'PlatformFilterSet',
+    'PowerConnectionFilterSet',
+    'PowerFeedFilterSet',
+    'PowerOutletFilterSet',
+    'PowerOutletTemplateFilterSet',
+    'PowerPanelFilterSet',
+    'PowerPortFilterSet',
+    'PowerPortTemplateFilterSet',
+    'RackFilterSet',
+    'RackGroupFilterSet',
+    'RackReservationFilterSet',
+    'RackRoleFilterSet',
+    'RearPortFilterSet',
+    'RearPortTemplateFilterSet',
+    'RegionFilterSet',
+    'SiteFilterSet',
+    'VirtualChassisFilterSet',
 )
 )
 
 
 
 
-class RegionFilter(NameSlugSearchFilterSet):
+class RegionFilterSet(NameSlugSearchFilterSet):
     parent_id = django_filters.ModelMultipleChoiceFilter(
     parent_id = django_filters.ModelMultipleChoiceFilter(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         label='Parent region (ID)',
         label='Parent region (ID)',
@@ -78,7 +78,7 @@ class RegionFilter(NameSlugSearchFilterSet):
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class SiteFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class SiteFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -132,7 +132,7 @@ class SiteFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet
         return queryset.filter(qs_filter)
         return queryset.filter(qs_filter)
 
 
 
 
-class RackGroupFilter(NameSlugSearchFilterSet):
+class RackGroupFilterSet(NameSlugSearchFilterSet):
     region_id = TreeNodeMultipleChoiceFilter(
     region_id = TreeNodeMultipleChoiceFilter(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         field_name='site__region__in',
         field_name='site__region__in',
@@ -160,14 +160,14 @@ class RackGroupFilter(NameSlugSearchFilterSet):
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class RackRoleFilter(NameSlugSearchFilterSet):
+class RackRoleFilterSet(NameSlugSearchFilterSet):
 
 
     class Meta:
     class Meta:
         model = RackRole
         model = RackRole
         fields = ['id', 'name', 'slug', 'color']
         fields = ['id', 'name', 'slug', 'color']
 
 
 
 
-class RackFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class RackFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -245,7 +245,7 @@ class RackFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet
         )
         )
 
 
 
 
-class RackReservationFilter(TenancyFilterSet):
+class RackReservationFilterSet(TenancyFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -306,14 +306,14 @@ class RackReservationFilter(TenancyFilterSet):
         )
         )
 
 
 
 
-class ManufacturerFilter(NameSlugSearchFilterSet):
+class ManufacturerFilterSet(NameSlugSearchFilterSet):
 
 
     class Meta:
     class Meta:
         model = Manufacturer
         model = Manufacturer
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class DeviceTypeFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class DeviceTypeFilterSet(CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -404,70 +404,70 @@ class DeviceTypeComponentFilterSet(NameSlugSearchFilterSet):
     )
     )
 
 
 
 
-class ConsolePortTemplateFilter(DeviceTypeComponentFilterSet):
+class ConsolePortTemplateFilterSet(DeviceTypeComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = ConsolePortTemplate
         model = ConsolePortTemplate
         fields = ['id', 'name', 'type']
         fields = ['id', 'name', 'type']
 
 
 
 
-class ConsoleServerPortTemplateFilter(DeviceTypeComponentFilterSet):
+class ConsoleServerPortTemplateFilterSet(DeviceTypeComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = ConsoleServerPortTemplate
         model = ConsoleServerPortTemplate
         fields = ['id', 'name', 'type']
         fields = ['id', 'name', 'type']
 
 
 
 
-class PowerPortTemplateFilter(DeviceTypeComponentFilterSet):
+class PowerPortTemplateFilterSet(DeviceTypeComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = PowerPortTemplate
         model = PowerPortTemplate
         fields = ['id', 'name', 'type', 'maximum_draw', 'allocated_draw']
         fields = ['id', 'name', 'type', 'maximum_draw', 'allocated_draw']
 
 
 
 
-class PowerOutletTemplateFilter(DeviceTypeComponentFilterSet):
+class PowerOutletTemplateFilterSet(DeviceTypeComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = PowerOutletTemplate
         model = PowerOutletTemplate
         fields = ['id', 'name', 'type', 'feed_leg']
         fields = ['id', 'name', 'type', 'feed_leg']
 
 
 
 
-class InterfaceTemplateFilter(DeviceTypeComponentFilterSet):
+class InterfaceTemplateFilterSet(DeviceTypeComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = InterfaceTemplate
         model = InterfaceTemplate
         fields = ['id', 'name', 'type', 'mgmt_only']
         fields = ['id', 'name', 'type', 'mgmt_only']
 
 
 
 
-class FrontPortTemplateFilter(DeviceTypeComponentFilterSet):
+class FrontPortTemplateFilterSet(DeviceTypeComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = FrontPortTemplate
         model = FrontPortTemplate
         fields = ['id', 'name', 'type']
         fields = ['id', 'name', 'type']
 
 
 
 
-class RearPortTemplateFilter(DeviceTypeComponentFilterSet):
+class RearPortTemplateFilterSet(DeviceTypeComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = RearPortTemplate
         model = RearPortTemplate
         fields = ['id', 'name', 'type', 'positions']
         fields = ['id', 'name', 'type', 'positions']
 
 
 
 
-class DeviceBayTemplateFilter(DeviceTypeComponentFilterSet):
+class DeviceBayTemplateFilterSet(DeviceTypeComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = DeviceBayTemplate
         model = DeviceBayTemplate
         fields = ['id', 'name']
         fields = ['id', 'name']
 
 
 
 
-class DeviceRoleFilter(NameSlugSearchFilterSet):
+class DeviceRoleFilterSet(NameSlugSearchFilterSet):
 
 
     class Meta:
     class Meta:
         model = DeviceRole
         model = DeviceRole
         fields = ['id', 'name', 'slug', 'color', 'vm_role']
         fields = ['id', 'name', 'slug', 'color', 'vm_role']
 
 
 
 
-class PlatformFilter(NameSlugSearchFilterSet):
+class PlatformFilterSet(NameSlugSearchFilterSet):
     manufacturer_id = django_filters.ModelMultipleChoiceFilter(
     manufacturer_id = django_filters.ModelMultipleChoiceFilter(
         field_name='manufacturer',
         field_name='manufacturer',
         queryset=Manufacturer.objects.all(),
         queryset=Manufacturer.objects.all(),
@@ -485,7 +485,7 @@ class PlatformFilter(NameSlugSearchFilterSet):
         fields = ['id', 'name', 'slug', 'napalm_driver']
         fields = ['id', 'name', 'slug', 'napalm_driver']
 
 
 
 
-class DeviceFilter(LocalConfigContextFilter, TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class DeviceFilterSet(LocalConfigContextFilterSet, TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -723,7 +723,7 @@ class DeviceComponentFilterSet(django_filters.FilterSet):
         )
         )
 
 
 
 
-class ConsolePortFilter(DeviceComponentFilterSet):
+class ConsolePortFilterSet(DeviceComponentFilterSet):
     type = django_filters.MultipleChoiceFilter(
     type = django_filters.MultipleChoiceFilter(
         choices=ConsolePortTypeChoices,
         choices=ConsolePortTypeChoices,
         null_value=None
         null_value=None
@@ -739,7 +739,7 @@ class ConsolePortFilter(DeviceComponentFilterSet):
         fields = ['id', 'name', 'description', 'connection_status']
         fields = ['id', 'name', 'description', 'connection_status']
 
 
 
 
-class ConsoleServerPortFilter(DeviceComponentFilterSet):
+class ConsoleServerPortFilterSet(DeviceComponentFilterSet):
     type = django_filters.MultipleChoiceFilter(
     type = django_filters.MultipleChoiceFilter(
         choices=ConsolePortTypeChoices,
         choices=ConsolePortTypeChoices,
         null_value=None
         null_value=None
@@ -755,7 +755,7 @@ class ConsoleServerPortFilter(DeviceComponentFilterSet):
         fields = ['id', 'name', 'description', 'connection_status']
         fields = ['id', 'name', 'description', 'connection_status']
 
 
 
 
-class PowerPortFilter(DeviceComponentFilterSet):
+class PowerPortFilterSet(DeviceComponentFilterSet):
     type = django_filters.MultipleChoiceFilter(
     type = django_filters.MultipleChoiceFilter(
         choices=PowerPortTypeChoices,
         choices=PowerPortTypeChoices,
         null_value=None
         null_value=None
@@ -771,7 +771,7 @@ class PowerPortFilter(DeviceComponentFilterSet):
         fields = ['id', 'name', 'maximum_draw', 'allocated_draw', 'description', 'connection_status']
         fields = ['id', 'name', 'maximum_draw', 'allocated_draw', 'description', 'connection_status']
 
 
 
 
-class PowerOutletFilter(DeviceComponentFilterSet):
+class PowerOutletFilterSet(DeviceComponentFilterSet):
     type = django_filters.MultipleChoiceFilter(
     type = django_filters.MultipleChoiceFilter(
         choices=PowerOutletTypeChoices,
         choices=PowerOutletTypeChoices,
         null_value=None
         null_value=None
@@ -787,7 +787,7 @@ class PowerOutletFilter(DeviceComponentFilterSet):
         fields = ['id', 'name', 'feed_leg', 'description', 'connection_status']
         fields = ['id', 'name', 'feed_leg', 'description', 'connection_status']
 
 
 
 
-class InterfaceFilter(django_filters.FilterSet):
+class InterfaceFilterSet(django_filters.FilterSet):
     """
     """
     Not using DeviceComponentFilterSet for Interfaces because we need to check for VirtualChassis membership.
     Not using DeviceComponentFilterSet for Interfaces because we need to check for VirtualChassis membership.
     """
     """
@@ -915,7 +915,7 @@ class InterfaceFilter(django_filters.FilterSet):
         }.get(value, queryset.none())
         }.get(value, queryset.none())
 
 
 
 
-class FrontPortFilter(DeviceComponentFilterSet):
+class FrontPortFilterSet(DeviceComponentFilterSet):
     cabled = django_filters.BooleanFilter(
     cabled = django_filters.BooleanFilter(
         field_name='cable',
         field_name='cable',
         lookup_expr='isnull',
         lookup_expr='isnull',
@@ -927,7 +927,7 @@ class FrontPortFilter(DeviceComponentFilterSet):
         fields = ['id', 'name', 'type', 'description']
         fields = ['id', 'name', 'type', 'description']
 
 
 
 
-class RearPortFilter(DeviceComponentFilterSet):
+class RearPortFilterSet(DeviceComponentFilterSet):
     cabled = django_filters.BooleanFilter(
     cabled = django_filters.BooleanFilter(
         field_name='cable',
         field_name='cable',
         lookup_expr='isnull',
         lookup_expr='isnull',
@@ -939,14 +939,14 @@ class RearPortFilter(DeviceComponentFilterSet):
         fields = ['id', 'name', 'type', 'positions', 'description']
         fields = ['id', 'name', 'type', 'positions', 'description']
 
 
 
 
-class DeviceBayFilter(DeviceComponentFilterSet):
+class DeviceBayFilterSet(DeviceComponentFilterSet):
 
 
     class Meta:
     class Meta:
         model = DeviceBay
         model = DeviceBay
         fields = ['id', 'name', 'description']
         fields = ['id', 'name', 'description']
 
 
 
 
-class InventoryItemFilter(DeviceComponentFilterSet):
+class InventoryItemFilterSet(DeviceComponentFilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',
@@ -1017,7 +1017,7 @@ class InventoryItemFilter(DeviceComponentFilterSet):
         return queryset.filter(qs_filter)
         return queryset.filter(qs_filter)
 
 
 
 
-class VirtualChassisFilter(django_filters.FilterSet):
+class VirtualChassisFilterSet(django_filters.FilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',
@@ -1071,7 +1071,7 @@ class VirtualChassisFilter(django_filters.FilterSet):
         return queryset.filter(qs_filter)
         return queryset.filter(qs_filter)
 
 
 
 
-class CableFilter(django_filters.FilterSet):
+class CableFilterSet(django_filters.FilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',
@@ -1126,7 +1126,7 @@ class CableFilter(django_filters.FilterSet):
         return queryset
         return queryset
 
 
 
 
-class ConsoleConnectionFilter(django_filters.FilterSet):
+class ConsoleConnectionFilterSet(django_filters.FilterSet):
     site = django_filters.CharFilter(
     site = django_filters.CharFilter(
         method='filter_site',
         method='filter_site',
         label='Site (slug)',
         label='Site (slug)',
@@ -1157,7 +1157,7 @@ class ConsoleConnectionFilter(django_filters.FilterSet):
         )
         )
 
 
 
 
-class PowerConnectionFilter(django_filters.FilterSet):
+class PowerConnectionFilterSet(django_filters.FilterSet):
     site = django_filters.CharFilter(
     site = django_filters.CharFilter(
         method='filter_site',
         method='filter_site',
         label='Site (slug)',
         label='Site (slug)',
@@ -1188,7 +1188,7 @@ class PowerConnectionFilter(django_filters.FilterSet):
         )
         )
 
 
 
 
-class InterfaceConnectionFilter(django_filters.FilterSet):
+class InterfaceConnectionFilterSet(django_filters.FilterSet):
     site = django_filters.CharFilter(
     site = django_filters.CharFilter(
         method='filter_site',
         method='filter_site',
         label='Site (slug)',
         label='Site (slug)',
@@ -1222,7 +1222,7 @@ class InterfaceConnectionFilter(django_filters.FilterSet):
         )
         )
 
 
 
 
-class PowerPanelFilter(django_filters.FilterSet):
+class PowerPanelFilterSet(django_filters.FilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -1271,7 +1271,7 @@ class PowerPanelFilter(django_filters.FilterSet):
         return queryset.filter(qs_filter)
         return queryset.filter(qs_filter)
 
 
 
 
-class PowerFeedFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class PowerFeedFilterSet(CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'

+ 36 - 36
netbox/dcim/tests/test_filters.py

@@ -42,27 +42,27 @@ class RegionTestCase(TestCase):
     def test_id(self):
     def test_id(self):
         id_list = self.queryset.values_list('id', flat=True)[:2]
         id_list = self.queryset.values_list('id', flat=True)[:2]
         params = {'id': [str(id) for id in id_list]}
         params = {'id': [str(id) for id in id_list]}
-        self.assertEqual(RegionFilter(params, self.queryset).qs.count(), 2)
+        self.assertEqual(RegionFilterSet(params, self.queryset).qs.count(), 2)
 
 
     def test_name(self):
     def test_name(self):
         params = {'name': ['Region 1', 'Region 2']}
         params = {'name': ['Region 1', 'Region 2']}
-        self.assertEqual(RegionFilter(params, self.queryset).qs.count(), 2)
+        self.assertEqual(RegionFilterSet(params, self.queryset).qs.count(), 2)
 
 
     def test_slug(self):
     def test_slug(self):
         params = {'slug': ['region-1', 'region-2']}
         params = {'slug': ['region-1', 'region-2']}
-        self.assertEqual(RegionFilter(params, self.queryset).qs.count(), 2)
+        self.assertEqual(RegionFilterSet(params, self.queryset).qs.count(), 2)
 
 
     def test_parent(self):
     def test_parent(self):
         parent_regions = Region.objects.filter(parent__isnull=True)[:2]
         parent_regions = Region.objects.filter(parent__isnull=True)[:2]
         params = {'parent_id': [parent_regions[0].pk, parent_regions[1].pk]}
         params = {'parent_id': [parent_regions[0].pk, parent_regions[1].pk]}
-        self.assertEqual(RegionFilter(params, self.queryset).qs.count(), 4)
+        self.assertEqual(RegionFilterSet(params, self.queryset).qs.count(), 4)
         params = {'parent': [parent_regions[0].slug, parent_regions[1].slug]}
         params = {'parent': [parent_regions[0].slug, parent_regions[1].slug]}
-        self.assertEqual(RegionFilter(params, self.queryset).qs.count(), 4)
+        self.assertEqual(RegionFilterSet(params, self.queryset).qs.count(), 4)
 
 
 
 
 class SiteTestCase(TestCase):
 class SiteTestCase(TestCase):
     queryset = Site.objects.all()
     queryset = Site.objects.all()
-    filterset = SiteFilter
+    filterset = SiteFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -142,7 +142,7 @@ class SiteTestCase(TestCase):
 
 
 class RackGroupTestCase(TestCase):
 class RackGroupTestCase(TestCase):
     queryset = RackGroup.objects.all()
     queryset = RackGroup.objects.all()
-    filterset = RackGroupFilter
+    filterset = RackGroupFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -199,7 +199,7 @@ class RackGroupTestCase(TestCase):
 
 
 class RackRoleTestCase(TestCase):
 class RackRoleTestCase(TestCase):
     queryset = RackRole.objects.all()
     queryset = RackRole.objects.all()
-    filterset = RackRoleFilter
+    filterset = RackRoleFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -231,7 +231,7 @@ class RackRoleTestCase(TestCase):
 
 
 class RackTestCase(TestCase):
 class RackTestCase(TestCase):
     queryset = Rack.objects.all()
     queryset = Rack.objects.all()
-    filterset = RackFilter
+    filterset = RackFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -368,7 +368,7 @@ class RackTestCase(TestCase):
 
 
 class RackReservationTestCase(TestCase):
 class RackReservationTestCase(TestCase):
     queryset = RackReservation.objects.all()
     queryset = RackReservation.objects.all()
-    filterset = RackReservationFilter
+    filterset = RackReservationFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -438,7 +438,7 @@ class RackReservationTestCase(TestCase):
 
 
 class ManufacturerTestCase(TestCase):
 class ManufacturerTestCase(TestCase):
     queryset = Manufacturer.objects.all()
     queryset = Manufacturer.objects.all()
-    filterset = ManufacturerFilter
+    filterset = ManufacturerFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -466,7 +466,7 @@ class ManufacturerTestCase(TestCase):
 
 
 class DeviceTypeTestCase(TestCase):
 class DeviceTypeTestCase(TestCase):
     queryset = DeviceType.objects.all()
     queryset = DeviceType.objects.all()
-    filterset = DeviceTypeFilter
+    filterset = DeviceTypeFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -604,7 +604,7 @@ class DeviceTypeTestCase(TestCase):
 
 
 class ConsolePortTemplateTestCase(TestCase):
 class ConsolePortTemplateTestCase(TestCase):
     queryset = ConsolePortTemplate.objects.all()
     queryset = ConsolePortTemplate.objects.all()
-    filterset = ConsolePortTemplateFilter
+    filterset = ConsolePortTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -641,7 +641,7 @@ class ConsolePortTemplateTestCase(TestCase):
 
 
 class ConsoleServerPortTemplateTestCase(TestCase):
 class ConsoleServerPortTemplateTestCase(TestCase):
     queryset = ConsoleServerPortTemplate.objects.all()
     queryset = ConsoleServerPortTemplate.objects.all()
-    filterset = ConsoleServerPortTemplateFilter
+    filterset = ConsoleServerPortTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -678,7 +678,7 @@ class ConsoleServerPortTemplateTestCase(TestCase):
 
 
 class PowerPortTemplateTestCase(TestCase):
 class PowerPortTemplateTestCase(TestCase):
     queryset = PowerPortTemplate.objects.all()
     queryset = PowerPortTemplate.objects.all()
-    filterset = PowerPortTemplateFilter
+    filterset = PowerPortTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -723,7 +723,7 @@ class PowerPortTemplateTestCase(TestCase):
 
 
 class PowerOutletTemplateTestCase(TestCase):
 class PowerOutletTemplateTestCase(TestCase):
     queryset = PowerOutletTemplate.objects.all()
     queryset = PowerOutletTemplate.objects.all()
-    filterset = PowerOutletTemplateFilter
+    filterset = PowerOutletTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -765,7 +765,7 @@ class PowerOutletTemplateTestCase(TestCase):
 
 
 class InterfaceTemplateTestCase(TestCase):
 class InterfaceTemplateTestCase(TestCase):
     queryset = InterfaceTemplate.objects.all()
     queryset = InterfaceTemplate.objects.all()
-    filterset = InterfaceTemplateFilter
+    filterset = InterfaceTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -813,7 +813,7 @@ class InterfaceTemplateTestCase(TestCase):
 
 
 class FrontPortTemplateTestCase(TestCase):
 class FrontPortTemplateTestCase(TestCase):
     queryset = FrontPortTemplate.objects.all()
     queryset = FrontPortTemplate.objects.all()
-    filterset = FrontPortTemplateFilter
+    filterset = FrontPortTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -862,7 +862,7 @@ class FrontPortTemplateTestCase(TestCase):
 
 
 class RearPortTemplateTestCase(TestCase):
 class RearPortTemplateTestCase(TestCase):
     queryset = RearPortTemplate.objects.all()
     queryset = RearPortTemplate.objects.all()
-    filterset = RearPortTemplateFilter
+    filterset = RearPortTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -908,7 +908,7 @@ class RearPortTemplateTestCase(TestCase):
 
 
 class DeviceBayTemplateTestCase(TestCase):
 class DeviceBayTemplateTestCase(TestCase):
     queryset = DeviceBayTemplate.objects.all()
     queryset = DeviceBayTemplate.objects.all()
-    filterset = DeviceBayTemplateFilter
+    filterset = DeviceBayTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -945,7 +945,7 @@ class DeviceBayTemplateTestCase(TestCase):
 
 
 class DeviceRoleTestCase(TestCase):
 class DeviceRoleTestCase(TestCase):
     queryset = DeviceRole.objects.all()
     queryset = DeviceRole.objects.all()
-    filterset = DeviceRoleFilter
+    filterset = DeviceRoleFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -983,7 +983,7 @@ class DeviceRoleTestCase(TestCase):
 
 
 class PlatformTestCase(TestCase):
 class PlatformTestCase(TestCase):
     queryset = Platform.objects.all()
     queryset = Platform.objects.all()
-    filterset = PlatformFilter
+    filterset = PlatformFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1029,7 +1029,7 @@ class PlatformTestCase(TestCase):
 
 
 class DeviceTestCase(TestCase):
 class DeviceTestCase(TestCase):
     queryset = Device.objects.all()
     queryset = Device.objects.all()
-    filterset = DeviceFilter
+    filterset = DeviceFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1331,7 +1331,7 @@ class DeviceTestCase(TestCase):
 
 
 class ConsolePortTestCase(TestCase):
 class ConsolePortTestCase(TestCase):
     queryset = ConsolePort.objects.all()
     queryset = ConsolePort.objects.all()
-    filterset = ConsolePortFilter
+    filterset = ConsolePortFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1401,7 +1401,7 @@ class ConsolePortTestCase(TestCase):
 
 
 class ConsoleServerPortTestCase(TestCase):
 class ConsoleServerPortTestCase(TestCase):
     queryset = ConsoleServerPort.objects.all()
     queryset = ConsoleServerPort.objects.all()
-    filterset = ConsoleServerPortFilter
+    filterset = ConsoleServerPortFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1471,7 +1471,7 @@ class ConsoleServerPortTestCase(TestCase):
 
 
 class PowerPortTestCase(TestCase):
 class PowerPortTestCase(TestCase):
     queryset = PowerPort.objects.all()
     queryset = PowerPort.objects.all()
-    filterset = PowerPortFilter
+    filterset = PowerPortFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1549,7 +1549,7 @@ class PowerPortTestCase(TestCase):
 
 
 class PowerOutletTestCase(TestCase):
 class PowerOutletTestCase(TestCase):
     queryset = PowerOutlet.objects.all()
     queryset = PowerOutlet.objects.all()
-    filterset = PowerOutletFilter
+    filterset = PowerOutletFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1624,7 +1624,7 @@ class PowerOutletTestCase(TestCase):
 
 
 class InterfaceTestCase(TestCase):
 class InterfaceTestCase(TestCase):
     queryset = Interface.objects.all()
     queryset = Interface.objects.all()
-    filterset = InterfaceFilter
+    filterset = InterfaceFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1725,7 +1725,7 @@ class InterfaceTestCase(TestCase):
 
 
 class FrontPortTestCase(TestCase):
 class FrontPortTestCase(TestCase):
     queryset = FrontPort.objects.all()
     queryset = FrontPort.objects.all()
-    filterset = FrontPortFilter
+    filterset = FrontPortFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1802,7 +1802,7 @@ class FrontPortTestCase(TestCase):
 
 
 class RearPortTestCase(TestCase):
 class RearPortTestCase(TestCase):
     queryset = RearPort.objects.all()
     queryset = RearPort.objects.all()
-    filterset = RearPortFilter
+    filterset = RearPortFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1873,7 +1873,7 @@ class RearPortTestCase(TestCase):
 
 
 class DeviceBayTestCase(TestCase):
 class DeviceBayTestCase(TestCase):
     queryset = DeviceBay.objects.all()
     queryset = DeviceBay.objects.all()
-    filterset = DeviceBayFilter
+    filterset = DeviceBayFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -1920,7 +1920,7 @@ class DeviceBayTestCase(TestCase):
 
 
 class InventoryItemTestCase(TestCase):
 class InventoryItemTestCase(TestCase):
     queryset = InventoryItem.objects.all()
     queryset = InventoryItem.objects.all()
-    filterset = InventoryItemFilter
+    filterset = InventoryItemFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -2038,7 +2038,7 @@ class InventoryItemTestCase(TestCase):
 
 
 class VirtualChassisTestCase(TestCase):
 class VirtualChassisTestCase(TestCase):
     queryset = VirtualChassis.objects.all()
     queryset = VirtualChassis.objects.all()
-    filterset = VirtualChassisFilter
+    filterset = VirtualChassisFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -2109,7 +2109,7 @@ class VirtualChassisTestCase(TestCase):
 
 
 class CableTestCase(TestCase):
 class CableTestCase(TestCase):
     queryset = Cable.objects.all()
     queryset = Cable.objects.all()
-    filterset = CableFilter
+    filterset = CableFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -2221,7 +2221,7 @@ class CableTestCase(TestCase):
 
 
 class PowerPanelTestCase(TestCase):
 class PowerPanelTestCase(TestCase):
     queryset = PowerPanel.objects.all()
     queryset = PowerPanel.objects.all()
-    filterset = PowerPanelFilter
+    filterset = PowerPanelFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -2281,7 +2281,7 @@ class PowerPanelTestCase(TestCase):
 
 
 class PowerFeedTestCase(TestCase):
 class PowerFeedTestCase(TestCase):
     queryset = PowerFeed.objects.all()
     queryset = PowerFeed.objects.all()
-    filterset = PowerFeedFilter
+    filterset = PowerFeedFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):

+ 71 - 71
netbox/dcim/views.py

@@ -148,8 +148,8 @@ class RegionListView(PermissionRequiredMixin, ObjectListView):
         'site_count',
         'site_count',
         cumulative=True
         cumulative=True
     )
     )
-    filter = filters.RegionFilter
-    filter_form = forms.RegionFilterForm
+    filterset = filters.RegionFilterSet
+    filterset_form = forms.RegionFilterForm
     table = tables.RegionTable
     table = tables.RegionTable
     template_name = 'dcim/region_list.html'
     template_name = 'dcim/region_list.html'
 
 
@@ -175,7 +175,7 @@ class RegionBulkImportView(PermissionRequiredMixin, BulkImportView):
 class RegionBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RegionBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_region'
     permission_required = 'dcim.delete_region'
     queryset = Region.objects.all()
     queryset = Region.objects.all()
-    filter = filters.RegionFilter
+    filterset = filters.RegionFilterSet
     table = tables.RegionTable
     table = tables.RegionTable
     default_return_url = 'dcim:region_list'
     default_return_url = 'dcim:region_list'
 
 
@@ -187,8 +187,8 @@ class RegionBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class SiteListView(PermissionRequiredMixin, ObjectListView):
 class SiteListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_site'
     permission_required = 'dcim.view_site'
     queryset = Site.objects.prefetch_related('region', 'tenant')
     queryset = Site.objects.prefetch_related('region', 'tenant')
-    filter = filters.SiteFilter
-    filter_form = forms.SiteFilterForm
+    filterset = filters.SiteFilterSet
+    filterset_form = forms.SiteFilterForm
     table = tables.SiteTable
     table = tables.SiteTable
     template_name = 'dcim/site_list.html'
     template_name = 'dcim/site_list.html'
 
 
@@ -246,7 +246,7 @@ class SiteBulkImportView(PermissionRequiredMixin, BulkImportView):
 class SiteBulkEditView(PermissionRequiredMixin, BulkEditView):
 class SiteBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'dcim.change_site'
     permission_required = 'dcim.change_site'
     queryset = Site.objects.prefetch_related('region', 'tenant')
     queryset = Site.objects.prefetch_related('region', 'tenant')
-    filter = filters.SiteFilter
+    filterset = filters.SiteFilterSet
     table = tables.SiteTable
     table = tables.SiteTable
     form = forms.SiteBulkEditForm
     form = forms.SiteBulkEditForm
     default_return_url = 'dcim:site_list'
     default_return_url = 'dcim:site_list'
@@ -255,7 +255,7 @@ class SiteBulkEditView(PermissionRequiredMixin, BulkEditView):
 class SiteBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class SiteBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_site'
     permission_required = 'dcim.delete_site'
     queryset = Site.objects.prefetch_related('region', 'tenant')
     queryset = Site.objects.prefetch_related('region', 'tenant')
-    filter = filters.SiteFilter
+    filterset = filters.SiteFilterSet
     table = tables.SiteTable
     table = tables.SiteTable
     default_return_url = 'dcim:site_list'
     default_return_url = 'dcim:site_list'
 
 
@@ -267,8 +267,8 @@ class SiteBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RackGroupListView(PermissionRequiredMixin, ObjectListView):
 class RackGroupListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_rackgroup'
     permission_required = 'dcim.view_rackgroup'
     queryset = RackGroup.objects.prefetch_related('site').annotate(rack_count=Count('racks'))
     queryset = RackGroup.objects.prefetch_related('site').annotate(rack_count=Count('racks'))
-    filter = filters.RackGroupFilter
-    filter_form = forms.RackGroupFilterForm
+    filterset = filters.RackGroupFilterSet
+    filterset_form = forms.RackGroupFilterForm
     table = tables.RackGroupTable
     table = tables.RackGroupTable
     template_name = 'dcim/rackgroup_list.html'
     template_name = 'dcim/rackgroup_list.html'
 
 
@@ -294,7 +294,7 @@ class RackGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
 class RackGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RackGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_rackgroup'
     permission_required = 'dcim.delete_rackgroup'
     queryset = RackGroup.objects.prefetch_related('site').annotate(rack_count=Count('racks'))
     queryset = RackGroup.objects.prefetch_related('site').annotate(rack_count=Count('racks'))
-    filter = filters.RackGroupFilter
+    filterset = filters.RackGroupFilterSet
     table = tables.RackGroupTable
     table = tables.RackGroupTable
     default_return_url = 'dcim:rackgroup_list'
     default_return_url = 'dcim:rackgroup_list'
 
 
@@ -346,8 +346,8 @@ class RackListView(PermissionRequiredMixin, ObjectListView):
     ).annotate(
     ).annotate(
         device_count=Count('devices')
         device_count=Count('devices')
     )
     )
-    filter = filters.RackFilter
-    filter_form = forms.RackFilterForm
+    filterset = filters.RackFilterSet
+    filterset_form = forms.RackFilterForm
     table = tables.RackDetailTable
     table = tables.RackDetailTable
     template_name = 'dcim/rack_list.html'
     template_name = 'dcim/rack_list.html'
 
 
@@ -361,7 +361,7 @@ class RackElevationListView(PermissionRequiredMixin, View):
     def get(self, request):
     def get(self, request):
 
 
         racks = Rack.objects.prefetch_related('site', 'group', 'tenant', 'role', 'devices__device_type')
         racks = Rack.objects.prefetch_related('site', 'group', 'tenant', 'role', 'devices__device_type')
-        racks = filters.RackFilter(request.GET, racks).qs
+        racks = filters.RackFilterSet(request.GET, racks).qs
         total_count = racks.count()
         total_count = racks.count()
 
 
         # Pagination
         # Pagination
@@ -450,7 +450,7 @@ class RackBulkImportView(PermissionRequiredMixin, BulkImportView):
 class RackBulkEditView(PermissionRequiredMixin, BulkEditView):
 class RackBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'dcim.change_rack'
     permission_required = 'dcim.change_rack'
     queryset = Rack.objects.prefetch_related('site', 'group', 'tenant', 'role')
     queryset = Rack.objects.prefetch_related('site', 'group', 'tenant', 'role')
-    filter = filters.RackFilter
+    filterset = filters.RackFilterSet
     table = tables.RackTable
     table = tables.RackTable
     form = forms.RackBulkEditForm
     form = forms.RackBulkEditForm
     default_return_url = 'dcim:rack_list'
     default_return_url = 'dcim:rack_list'
@@ -459,7 +459,7 @@ class RackBulkEditView(PermissionRequiredMixin, BulkEditView):
 class RackBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RackBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_rack'
     permission_required = 'dcim.delete_rack'
     queryset = Rack.objects.prefetch_related('site', 'group', 'tenant', 'role')
     queryset = Rack.objects.prefetch_related('site', 'group', 'tenant', 'role')
-    filter = filters.RackFilter
+    filterset = filters.RackFilterSet
     table = tables.RackTable
     table = tables.RackTable
     default_return_url = 'dcim:rack_list'
     default_return_url = 'dcim:rack_list'
 
 
@@ -471,8 +471,8 @@ class RackBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RackReservationListView(PermissionRequiredMixin, ObjectListView):
 class RackReservationListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_rackreservation'
     permission_required = 'dcim.view_rackreservation'
     queryset = RackReservation.objects.prefetch_related('rack__site')
     queryset = RackReservation.objects.prefetch_related('rack__site')
-    filter = filters.RackReservationFilter
-    filter_form = forms.RackReservationFilterForm
+    filterset = filters.RackReservationFilterSet
+    filterset_form = forms.RackReservationFilterForm
     table = tables.RackReservationTable
     table = tables.RackReservationTable
     template_name = 'dcim/rackreservation_list.html'
     template_name = 'dcim/rackreservation_list.html'
 
 
@@ -507,7 +507,7 @@ class RackReservationDeleteView(PermissionRequiredMixin, ObjectDeleteView):
 class RackReservationBulkEditView(PermissionRequiredMixin, BulkEditView):
 class RackReservationBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'dcim.change_rackreservation'
     permission_required = 'dcim.change_rackreservation'
     queryset = RackReservation.objects.prefetch_related('rack', 'user')
     queryset = RackReservation.objects.prefetch_related('rack', 'user')
-    filter = filters.RackReservationFilter
+    filterset = filters.RackReservationFilterSet
     table = tables.RackReservationTable
     table = tables.RackReservationTable
     form = forms.RackReservationBulkEditForm
     form = forms.RackReservationBulkEditForm
     default_return_url = 'dcim:rackreservation_list'
     default_return_url = 'dcim:rackreservation_list'
@@ -516,7 +516,7 @@ class RackReservationBulkEditView(PermissionRequiredMixin, BulkEditView):
 class RackReservationBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RackReservationBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_rackreservation'
     permission_required = 'dcim.delete_rackreservation'
     queryset = RackReservation.objects.prefetch_related('rack', 'user')
     queryset = RackReservation.objects.prefetch_related('rack', 'user')
-    filter = filters.RackReservationFilter
+    filterset = filters.RackReservationFilterSet
     table = tables.RackReservationTable
     table = tables.RackReservationTable
     default_return_url = 'dcim:rackreservation_list'
     default_return_url = 'dcim:rackreservation_list'
 
 
@@ -568,8 +568,8 @@ class ManufacturerBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class DeviceTypeListView(PermissionRequiredMixin, ObjectListView):
 class DeviceTypeListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_devicetype'
     permission_required = 'dcim.view_devicetype'
     queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(instance_count=Count('instances'))
     queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(instance_count=Count('instances'))
-    filter = filters.DeviceTypeFilter
-    filter_form = forms.DeviceTypeFilterForm
+    filterset = filters.DeviceTypeFilterSet
+    filterset_form = forms.DeviceTypeFilterForm
     table = tables.DeviceTypeTable
     table = tables.DeviceTypeTable
     template_name = 'dcim/devicetype_list.html'
     template_name = 'dcim/devicetype_list.html'
 
 
@@ -685,7 +685,7 @@ class DeviceTypeImportView(PermissionRequiredMixin, ObjectImportView):
 class DeviceTypeBulkEditView(PermissionRequiredMixin, BulkEditView):
 class DeviceTypeBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'dcim.change_devicetype'
     permission_required = 'dcim.change_devicetype'
     queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(instance_count=Count('instances'))
     queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(instance_count=Count('instances'))
-    filter = filters.DeviceTypeFilter
+    filterset = filters.DeviceTypeFilterSet
     table = tables.DeviceTypeTable
     table = tables.DeviceTypeTable
     form = forms.DeviceTypeBulkEditForm
     form = forms.DeviceTypeBulkEditForm
     default_return_url = 'dcim:devicetype_list'
     default_return_url = 'dcim:devicetype_list'
@@ -694,7 +694,7 @@ class DeviceTypeBulkEditView(PermissionRequiredMixin, BulkEditView):
 class DeviceTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class DeviceTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_devicetype'
     permission_required = 'dcim.delete_devicetype'
     queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(instance_count=Count('instances'))
     queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(instance_count=Count('instances'))
-    filter = filters.DeviceTypeFilter
+    filterset = filters.DeviceTypeFilterSet
     table = tables.DeviceTypeTable
     table = tables.DeviceTypeTable
     default_return_url = 'dcim:devicetype_list'
     default_return_url = 'dcim:devicetype_list'
 
 
@@ -976,8 +976,8 @@ class DeviceListView(PermissionRequiredMixin, ObjectListView):
     queryset = Device.objects.prefetch_related(
     queryset = Device.objects.prefetch_related(
         'device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack', 'primary_ip4', 'primary_ip6'
         'device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack', 'primary_ip4', 'primary_ip6'
     )
     )
-    filter = filters.DeviceFilter
-    filter_form = forms.DeviceFilterForm
+    filterset = filters.DeviceFilterSet
+    filterset_form = forms.DeviceFilterForm
     table = tables.DeviceDetailTable
     table = tables.DeviceDetailTable
     template_name = 'dcim/device_list.html'
     template_name = 'dcim/device_list.html'
 
 
@@ -1176,7 +1176,7 @@ class ChildDeviceBulkImportView(PermissionRequiredMixin, BulkImportView):
 class DeviceBulkEditView(PermissionRequiredMixin, BulkEditView):
 class DeviceBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'dcim.change_device'
     permission_required = 'dcim.change_device'
     queryset = Device.objects.prefetch_related('tenant', 'site', 'rack', 'device_role', 'device_type__manufacturer')
     queryset = Device.objects.prefetch_related('tenant', 'site', 'rack', 'device_role', 'device_type__manufacturer')
-    filter = filters.DeviceFilter
+    filterset = filters.DeviceFilterSet
     table = tables.DeviceTable
     table = tables.DeviceTable
     form = forms.DeviceBulkEditForm
     form = forms.DeviceBulkEditForm
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
@@ -1185,7 +1185,7 @@ class DeviceBulkEditView(PermissionRequiredMixin, BulkEditView):
 class DeviceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class DeviceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_device'
     permission_required = 'dcim.delete_device'
     queryset = Device.objects.prefetch_related('tenant', 'site', 'rack', 'device_role', 'device_type__manufacturer')
     queryset = Device.objects.prefetch_related('tenant', 'site', 'rack', 'device_role', 'device_type__manufacturer')
-    filter = filters.DeviceFilter
+    filterset = filters.DeviceFilterSet
     table = tables.DeviceTable
     table = tables.DeviceTable
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
 
 
@@ -1197,8 +1197,8 @@ class DeviceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class ConsolePortListView(PermissionRequiredMixin, ObjectListView):
 class ConsolePortListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_consoleport'
     permission_required = 'dcim.view_consoleport'
     queryset = ConsolePort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
     queryset = ConsolePort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
-    filter = filters.ConsolePortFilter
-    filter_form = forms.ConsolePortFilterForm
+    filterset = filters.ConsolePortFilterSet
+    filterset_form = forms.ConsolePortFilterForm
     table = tables.ConsolePortDetailTable
     table = tables.ConsolePortDetailTable
     template_name = 'dcim/device_component_list.html'
     template_name = 'dcim/device_component_list.html'
 
 
@@ -1245,8 +1245,8 @@ class ConsolePortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class ConsoleServerPortListView(PermissionRequiredMixin, ObjectListView):
 class ConsoleServerPortListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_consoleserverport'
     permission_required = 'dcim.view_consoleserverport'
     queryset = ConsoleServerPort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
     queryset = ConsoleServerPort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
-    filter = filters.ConsoleServerPortFilter
-    filter_form = forms.ConsoleServerPortFilterForm
+    filterset = filters.ConsoleServerPortFilterSet
+    filterset_form = forms.ConsoleServerPortFilterForm
     table = tables.ConsoleServerPortDetailTable
     table = tables.ConsoleServerPortDetailTable
     template_name = 'dcim/device_component_list.html'
     template_name = 'dcim/device_component_list.html'
 
 
@@ -1313,8 +1313,8 @@ class ConsoleServerPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class PowerPortListView(PermissionRequiredMixin, ObjectListView):
 class PowerPortListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_powerport'
     permission_required = 'dcim.view_powerport'
     queryset = PowerPort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
     queryset = PowerPort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
-    filter = filters.PowerPortFilter
-    filter_form = forms.PowerPortFilterForm
+    filterset = filters.PowerPortFilterSet
+    filterset_form = forms.PowerPortFilterForm
     table = tables.PowerPortDetailTable
     table = tables.PowerPortDetailTable
     template_name = 'dcim/device_component_list.html'
     template_name = 'dcim/device_component_list.html'
 
 
@@ -1361,8 +1361,8 @@ class PowerPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class PowerOutletListView(PermissionRequiredMixin, ObjectListView):
 class PowerOutletListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_poweroutlet'
     permission_required = 'dcim.view_poweroutlet'
     queryset = PowerOutlet.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
     queryset = PowerOutlet.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
-    filter = filters.PowerOutletFilter
-    filter_form = forms.PowerOutletFilterForm
+    filterset = filters.PowerOutletFilterSet
+    filterset_form = forms.PowerOutletFilterForm
     table = tables.PowerOutletDetailTable
     table = tables.PowerOutletDetailTable
     template_name = 'dcim/device_component_list.html'
     template_name = 'dcim/device_component_list.html'
 
 
@@ -1429,8 +1429,8 @@ class PowerOutletBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class InterfaceListView(PermissionRequiredMixin, ObjectListView):
 class InterfaceListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_interface'
     permission_required = 'dcim.view_interface'
     queryset = Interface.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
     queryset = Interface.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
-    filter = filters.InterfaceFilter
-    filter_form = forms.InterfaceFilterForm
+    filterset = filters.InterfaceFilterSet
+    filterset_form = forms.InterfaceFilterForm
     table = tables.InterfaceDetailTable
     table = tables.InterfaceDetailTable
     template_name = 'dcim/device_component_list.html'
     template_name = 'dcim/device_component_list.html'
 
 
@@ -1534,8 +1534,8 @@ class InterfaceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class FrontPortListView(PermissionRequiredMixin, ObjectListView):
 class FrontPortListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_frontport'
     permission_required = 'dcim.view_frontport'
     queryset = FrontPort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
     queryset = FrontPort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
-    filter = filters.FrontPortFilter
-    filter_form = forms.FrontPortFilterForm
+    filterset = filters.FrontPortFilterSet
+    filterset_form = forms.FrontPortFilterForm
     table = tables.FrontPortDetailTable
     table = tables.FrontPortDetailTable
     template_name = 'dcim/device_component_list.html'
     template_name = 'dcim/device_component_list.html'
 
 
@@ -1602,8 +1602,8 @@ class FrontPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RearPortListView(PermissionRequiredMixin, ObjectListView):
 class RearPortListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_rearport'
     permission_required = 'dcim.view_rearport'
     queryset = RearPort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
     queryset = RearPort.objects.prefetch_related('device', 'device__tenant', 'device__site', 'cable')
-    filter = filters.RearPortFilter
-    filter_form = forms.RearPortFilterForm
+    filterset = filters.RearPortFilterSet
+    filterset_form = forms.RearPortFilterForm
     table = tables.RearPortDetailTable
     table = tables.RearPortDetailTable
     template_name = 'dcim/device_component_list.html'
     template_name = 'dcim/device_component_list.html'
 
 
@@ -1672,8 +1672,8 @@ class DeviceBayListView(PermissionRequiredMixin, ObjectListView):
     queryset = DeviceBay.objects.prefetch_related(
     queryset = DeviceBay.objects.prefetch_related(
         'device', 'device__site', 'installed_device', 'installed_device__site'
         'device', 'device__site', 'installed_device', 'installed_device__site'
     )
     )
-    filter = filters.DeviceBayFilter
-    filter_form = forms.DeviceBayFilterForm
+    filterset = filters.DeviceBayFilterSet
+    filterset_form = forms.DeviceBayFilterForm
     table = tables.DeviceBayDetailTable
     table = tables.DeviceBayDetailTable
     template_name = 'dcim/device_component_list.html'
     template_name = 'dcim/device_component_list.html'
 
 
@@ -1799,7 +1799,7 @@ class DeviceBulkAddConsolePortView(PermissionRequiredMixin, BulkComponentCreateV
     form = forms.DeviceBulkAddComponentForm
     form = forms.DeviceBulkAddComponentForm
     model = ConsolePort
     model = ConsolePort
     model_form = forms.ConsolePortForm
     model_form = forms.ConsolePortForm
-    filter = filters.DeviceFilter
+    filterset = filters.DeviceFilterSet
     table = tables.DeviceTable
     table = tables.DeviceTable
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
 
 
@@ -1811,7 +1811,7 @@ class DeviceBulkAddConsoleServerPortView(PermissionRequiredMixin, BulkComponentC
     form = forms.DeviceBulkAddComponentForm
     form = forms.DeviceBulkAddComponentForm
     model = ConsoleServerPort
     model = ConsoleServerPort
     model_form = forms.ConsoleServerPortForm
     model_form = forms.ConsoleServerPortForm
-    filter = filters.DeviceFilter
+    filterset = filters.DeviceFilterSet
     table = tables.DeviceTable
     table = tables.DeviceTable
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
 
 
@@ -1823,7 +1823,7 @@ class DeviceBulkAddPowerPortView(PermissionRequiredMixin, BulkComponentCreateVie
     form = forms.DeviceBulkAddComponentForm
     form = forms.DeviceBulkAddComponentForm
     model = PowerPort
     model = PowerPort
     model_form = forms.PowerPortForm
     model_form = forms.PowerPortForm
-    filter = filters.DeviceFilter
+    filterset = filters.DeviceFilterSet
     table = tables.DeviceTable
     table = tables.DeviceTable
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
 
 
@@ -1835,7 +1835,7 @@ class DeviceBulkAddPowerOutletView(PermissionRequiredMixin, BulkComponentCreateV
     form = forms.DeviceBulkAddComponentForm
     form = forms.DeviceBulkAddComponentForm
     model = PowerOutlet
     model = PowerOutlet
     model_form = forms.PowerOutletForm
     model_form = forms.PowerOutletForm
-    filter = filters.DeviceFilter
+    filterset = filters.DeviceFilterSet
     table = tables.DeviceTable
     table = tables.DeviceTable
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
 
 
@@ -1847,7 +1847,7 @@ class DeviceBulkAddInterfaceView(PermissionRequiredMixin, BulkComponentCreateVie
     form = forms.DeviceBulkAddInterfaceForm
     form = forms.DeviceBulkAddInterfaceForm
     model = Interface
     model = Interface
     model_form = forms.InterfaceForm
     model_form = forms.InterfaceForm
-    filter = filters.DeviceFilter
+    filterset = filters.DeviceFilterSet
     table = tables.DeviceTable
     table = tables.DeviceTable
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
 
 
@@ -1859,7 +1859,7 @@ class DeviceBulkAddDeviceBayView(PermissionRequiredMixin, BulkComponentCreateVie
     form = forms.DeviceBulkAddComponentForm
     form = forms.DeviceBulkAddComponentForm
     model = DeviceBay
     model = DeviceBay
     model_form = forms.DeviceBayForm
     model_form = forms.DeviceBayForm
-    filter = filters.DeviceFilter
+    filterset = filters.DeviceFilterSet
     table = tables.DeviceTable
     table = tables.DeviceTable
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
 
 
@@ -1873,8 +1873,8 @@ class CableListView(PermissionRequiredMixin, ObjectListView):
     queryset = Cable.objects.prefetch_related(
     queryset = Cable.objects.prefetch_related(
         'termination_a', 'termination_b'
         'termination_a', 'termination_b'
     )
     )
-    filter = filters.CableFilter
-    filter_form = forms.CableFilterForm
+    filterset = filters.CableFilterSet
+    filterset_form = forms.CableFilterForm
     table = tables.CableTable
     table = tables.CableTable
     template_name = 'dcim/cable_list.html'
     template_name = 'dcim/cable_list.html'
 
 
@@ -2010,7 +2010,7 @@ class CableBulkImportView(PermissionRequiredMixin, BulkImportView):
 class CableBulkEditView(PermissionRequiredMixin, BulkEditView):
 class CableBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'dcim.change_cable'
     permission_required = 'dcim.change_cable'
     queryset = Cable.objects.prefetch_related('termination_a', 'termination_b')
     queryset = Cable.objects.prefetch_related('termination_a', 'termination_b')
-    filter = filters.CableFilter
+    filterset = filters.CableFilterSet
     table = tables.CableTable
     table = tables.CableTable
     form = forms.CableBulkEditForm
     form = forms.CableBulkEditForm
     default_return_url = 'dcim:cable_list'
     default_return_url = 'dcim:cable_list'
@@ -2019,7 +2019,7 @@ class CableBulkEditView(PermissionRequiredMixin, BulkEditView):
 class CableBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class CableBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_cable'
     permission_required = 'dcim.delete_cable'
     queryset = Cable.objects.prefetch_related('termination_a', 'termination_b')
     queryset = Cable.objects.prefetch_related('termination_a', 'termination_b')
-    filter = filters.CableFilter
+    filterset = filters.CableFilterSet
     table = tables.CableTable
     table = tables.CableTable
     default_return_url = 'dcim:cable_list'
     default_return_url = 'dcim:cable_list'
 
 
@@ -2037,8 +2037,8 @@ class ConsoleConnectionsListView(PermissionRequiredMixin, ObjectListView):
     ).order_by(
     ).order_by(
         'cable', 'connected_endpoint__device__name', 'connected_endpoint__name'
         'cable', 'connected_endpoint__device__name', 'connected_endpoint__name'
     )
     )
-    filter = filters.ConsoleConnectionFilter
-    filter_form = forms.ConsoleConnectionFilterForm
+    filterset = filters.ConsoleConnectionFilterSet
+    filterset_form = forms.ConsoleConnectionFilterForm
     table = tables.ConsoleConnectionTable
     table = tables.ConsoleConnectionTable
     template_name = 'dcim/console_connections_list.html'
     template_name = 'dcim/console_connections_list.html'
 
 
@@ -2068,8 +2068,8 @@ class PowerConnectionsListView(PermissionRequiredMixin, ObjectListView):
     ).order_by(
     ).order_by(
         'cable', '_connected_poweroutlet__device__name', '_connected_poweroutlet__name'
         'cable', '_connected_poweroutlet__device__name', '_connected_poweroutlet__name'
     )
     )
-    filter = filters.PowerConnectionFilter
-    filter_form = forms.PowerConnectionFilterForm
+    filterset = filters.PowerConnectionFilterSet
+    filterset_form = forms.PowerConnectionFilterForm
     table = tables.PowerConnectionTable
     table = tables.PowerConnectionTable
     template_name = 'dcim/power_connections_list.html'
     template_name = 'dcim/power_connections_list.html'
 
 
@@ -2101,8 +2101,8 @@ class InterfaceConnectionsListView(PermissionRequiredMixin, ObjectListView):
     ).order_by(
     ).order_by(
         'device'
         'device'
     )
     )
-    filter = filters.InterfaceConnectionFilter
-    filter_form = forms.InterfaceConnectionFilterForm
+    filterset = filters.InterfaceConnectionFilterSet
+    filterset_form = forms.InterfaceConnectionFilterForm
     table = tables.InterfaceConnectionTable
     table = tables.InterfaceConnectionTable
     template_name = 'dcim/interface_connections_list.html'
     template_name = 'dcim/interface_connections_list.html'
 
 
@@ -2136,8 +2136,8 @@ class InterfaceConnectionsListView(PermissionRequiredMixin, ObjectListView):
 class InventoryItemListView(PermissionRequiredMixin, ObjectListView):
 class InventoryItemListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_inventoryitem'
     permission_required = 'dcim.view_inventoryitem'
     queryset = InventoryItem.objects.prefetch_related('device', 'manufacturer')
     queryset = InventoryItem.objects.prefetch_related('device', 'manufacturer')
-    filter = filters.InventoryItemFilter
-    filter_form = forms.InventoryItemFilterForm
+    filterset = filters.InventoryItemFilterSet
+    filterset_form = forms.InventoryItemFilterForm
     table = tables.InventoryItemTable
     table = tables.InventoryItemTable
     template_name = 'dcim/inventoryitem_list.html'
     template_name = 'dcim/inventoryitem_list.html'
 
 
@@ -2171,7 +2171,7 @@ class InventoryItemBulkImportView(PermissionRequiredMixin, BulkImportView):
 class InventoryItemBulkEditView(PermissionRequiredMixin, BulkEditView):
 class InventoryItemBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'dcim.change_inventoryitem'
     permission_required = 'dcim.change_inventoryitem'
     queryset = InventoryItem.objects.prefetch_related('device', 'manufacturer')
     queryset = InventoryItem.objects.prefetch_related('device', 'manufacturer')
-    filter = filters.InventoryItemFilter
+    filterset = filters.InventoryItemFilterSet
     table = tables.InventoryItemTable
     table = tables.InventoryItemTable
     form = forms.InventoryItemBulkEditForm
     form = forms.InventoryItemBulkEditForm
     default_return_url = 'dcim:inventoryitem_list'
     default_return_url = 'dcim:inventoryitem_list'
@@ -2193,8 +2193,8 @@ class VirtualChassisListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'dcim.view_virtualchassis'
     permission_required = 'dcim.view_virtualchassis'
     queryset = VirtualChassis.objects.prefetch_related('master').annotate(member_count=Count('members'))
     queryset = VirtualChassis.objects.prefetch_related('master').annotate(member_count=Count('members'))
     table = tables.VirtualChassisTable
     table = tables.VirtualChassisTable
-    filter = filters.VirtualChassisFilter
-    filter_form = forms.VirtualChassisFilterForm
+    filterset = filters.VirtualChassisFilterSet
+    filterset_form = forms.VirtualChassisFilterForm
     template_name = 'dcim/virtualchassis_list.html'
     template_name = 'dcim/virtualchassis_list.html'
 
 
 
 
@@ -2436,8 +2436,8 @@ class PowerPanelListView(PermissionRequiredMixin, ObjectListView):
     ).annotate(
     ).annotate(
         powerfeed_count=Count('powerfeeds')
         powerfeed_count=Count('powerfeeds')
     )
     )
-    filter = filters.PowerPanelFilter
-    filter_form = forms.PowerPanelFilterForm
+    filterset = filters.PowerPanelFilterSet
+    filterset_form = forms.PowerPanelFilterForm
     table = tables.PowerPanelTable
     table = tables.PowerPanelTable
     template_name = 'dcim/powerpanel_list.html'
     template_name = 'dcim/powerpanel_list.html'
 
 
@@ -2491,7 +2491,7 @@ class PowerPanelBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     ).annotate(
     ).annotate(
         rack_count=Count('powerfeeds')
         rack_count=Count('powerfeeds')
     )
     )
-    filter = filters.PowerPanelFilter
+    filterset = filters.PowerPanelFilterSet
     table = tables.PowerPanelTable
     table = tables.PowerPanelTable
     default_return_url = 'dcim:powerpanel_list'
     default_return_url = 'dcim:powerpanel_list'
 
 
@@ -2505,8 +2505,8 @@ class PowerFeedListView(PermissionRequiredMixin, ObjectListView):
     queryset = PowerFeed.objects.prefetch_related(
     queryset = PowerFeed.objects.prefetch_related(
         'power_panel', 'rack'
         'power_panel', 'rack'
     )
     )
-    filter = filters.PowerFeedFilter
-    filter_form = forms.PowerFeedFilterForm
+    filterset = filters.PowerFeedFilterSet
+    filterset_form = forms.PowerFeedFilterForm
     table = tables.PowerFeedTable
     table = tables.PowerFeedTable
     template_name = 'dcim/powerfeed_list.html'
     template_name = 'dcim/powerfeed_list.html'
 
 
@@ -2551,7 +2551,7 @@ class PowerFeedBulkImportView(PermissionRequiredMixin, BulkImportView):
 class PowerFeedBulkEditView(PermissionRequiredMixin, BulkEditView):
 class PowerFeedBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'dcim.change_powerfeed'
     permission_required = 'dcim.change_powerfeed'
     queryset = PowerFeed.objects.prefetch_related('power_panel', 'rack')
     queryset = PowerFeed.objects.prefetch_related('power_panel', 'rack')
-    filter = filters.PowerFeedFilter
+    filterset = filters.PowerFeedFilterSet
     table = tables.PowerFeedTable
     table = tables.PowerFeedTable
     form = forms.PowerFeedBulkEditForm
     form = forms.PowerFeedBulkEditForm
     default_return_url = 'dcim:powerfeed_list'
     default_return_url = 'dcim:powerfeed_list'
@@ -2560,6 +2560,6 @@ class PowerFeedBulkEditView(PermissionRequiredMixin, BulkEditView):
 class PowerFeedBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class PowerFeedBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_powerfeed'
     permission_required = 'dcim.delete_powerfeed'
     queryset = PowerFeed.objects.prefetch_related('power_panel', 'rack')
     queryset = PowerFeed.objects.prefetch_related('power_panel', 'rack')
-    filter = filters.PowerFeedFilter
+    filterset = filters.PowerFeedFilterSet
     table = tables.PowerFeedTable
     table = tables.PowerFeedTable
     default_return_url = 'dcim:powerfeed_list'
     default_return_url = 'dcim:powerfeed_list'

+ 5 - 5
netbox/extras/api/views.py

@@ -102,7 +102,7 @@ class CustomFieldModelViewSet(ModelViewSet):
 class GraphViewSet(ModelViewSet):
 class GraphViewSet(ModelViewSet):
     queryset = Graph.objects.all()
     queryset = Graph.objects.all()
     serializer_class = serializers.GraphSerializer
     serializer_class = serializers.GraphSerializer
-    filterset_class = filters.GraphFilter
+    filterset_class = filters.GraphFilterSet
 
 
 
 
 #
 #
@@ -112,7 +112,7 @@ class GraphViewSet(ModelViewSet):
 class ExportTemplateViewSet(ModelViewSet):
 class ExportTemplateViewSet(ModelViewSet):
     queryset = ExportTemplate.objects.all()
     queryset = ExportTemplate.objects.all()
     serializer_class = serializers.ExportTemplateSerializer
     serializer_class = serializers.ExportTemplateSerializer
-    filterset_class = filters.ExportTemplateFilter
+    filterset_class = filters.ExportTemplateFilterSet
 
 
 
 
 #
 #
@@ -124,7 +124,7 @@ class TagViewSet(ModelViewSet):
         tagged_items=Count('extras_taggeditem_items', distinct=True)
         tagged_items=Count('extras_taggeditem_items', distinct=True)
     )
     )
     serializer_class = serializers.TagSerializer
     serializer_class = serializers.TagSerializer
-    filterset_class = filters.TagFilter
+    filterset_class = filters.TagFilterSet
 
 
 
 
 #
 #
@@ -145,7 +145,7 @@ class ConfigContextViewSet(ModelViewSet):
         'regions', 'sites', 'roles', 'platforms', 'tenant_groups', 'tenants',
         'regions', 'sites', 'roles', 'platforms', 'tenant_groups', 'tenants',
     )
     )
     serializer_class = serializers.ConfigContextSerializer
     serializer_class = serializers.ConfigContextSerializer
-    filterset_class = filters.ConfigContextFilter
+    filterset_class = filters.ConfigContextFilterSet
 
 
 
 
 #
 #
@@ -284,4 +284,4 @@ class ObjectChangeViewSet(ReadOnlyModelViewSet):
     """
     """
     queryset = ObjectChange.objects.prefetch_related('user')
     queryset = ObjectChange.objects.prefetch_related('user')
     serializer_class = serializers.ObjectChangeSerializer
     serializer_class = serializers.ObjectChangeSerializer
-    filterset_class = filters.ObjectChangeFilter
+    filterset_class = filters.ObjectChangeFilterSet

+ 12 - 12
netbox/extras/filters.py

@@ -9,15 +9,15 @@ from .models import ConfigContext, CustomField, Graph, ExportTemplate, ObjectCha
 
 
 
 
 __all__ = (
 __all__ = (
-    'ConfigContextFilter',
+    'ConfigContextFilterSet',
     'CreatedUpdatedFilterSet',
     'CreatedUpdatedFilterSet',
     'CustomFieldFilter',
     'CustomFieldFilter',
     'CustomFieldFilterSet',
     'CustomFieldFilterSet',
-    'ExportTemplateFilter',
-    'GraphFilter',
-    'LocalConfigContextFilter',
-    'ObjectChangeFilter',
-    'TagFilter',
+    'ExportTemplateFilterSet',
+    'GraphFilterSet',
+    'LocalConfigContextFilterSet',
+    'ObjectChangeFilterSet',
+    'TagFilterSet',
 )
 )
 
 
 
 
@@ -88,21 +88,21 @@ class CustomFieldFilterSet(django_filters.FilterSet):
             self.filters['cf_{}'.format(cf.name)] = CustomFieldFilter(field_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):
+class GraphFilterSet(django_filters.FilterSet):
 
 
     class Meta:
     class Meta:
         model = Graph
         model = Graph
         fields = ['type', 'name']
         fields = ['type', 'name']
 
 
 
 
-class ExportTemplateFilter(django_filters.FilterSet):
+class ExportTemplateFilterSet(django_filters.FilterSet):
 
 
     class Meta:
     class Meta:
         model = ExportTemplate
         model = ExportTemplate
         fields = ['content_type', 'name', 'template_language']
         fields = ['content_type', 'name', 'template_language']
 
 
 
 
-class TagFilter(django_filters.FilterSet):
+class TagFilterSet(django_filters.FilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',
@@ -121,7 +121,7 @@ class TagFilter(django_filters.FilterSet):
         )
         )
 
 
 
 
-class ConfigContextFilter(django_filters.FilterSet):
+class ConfigContextFilterSet(django_filters.FilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',
@@ -217,7 +217,7 @@ class ConfigContextFilter(django_filters.FilterSet):
 # Filter for Local Config Context Data
 # Filter for Local Config Context Data
 #
 #
 
 
-class LocalConfigContextFilter(django_filters.FilterSet):
+class LocalConfigContextFilterSet(django_filters.FilterSet):
     local_context_data = django_filters.BooleanFilter(
     local_context_data = django_filters.BooleanFilter(
         method='_local_context_data',
         method='_local_context_data',
         label='Has local config context data',
         label='Has local config context data',
@@ -227,7 +227,7 @@ class LocalConfigContextFilter(django_filters.FilterSet):
         return queryset.exclude(local_context_data__isnull=value)
         return queryset.exclude(local_context_data__isnull=value)
 
 
 
 
-class ObjectChangeFilter(django_filters.FilterSet):
+class ObjectChangeFilterSet(django_filters.FilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',

+ 3 - 3
netbox/extras/tests/test_filters.py

@@ -10,7 +10,7 @@ from tenancy.models import Tenant, TenantGroup
 
 
 class GraphTestCase(TestCase):
 class GraphTestCase(TestCase):
     queryset = Graph.objects.all()
     queryset = Graph.objects.all()
-    filterset = GraphFilter
+    filterset = GraphFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -35,7 +35,7 @@ class GraphTestCase(TestCase):
 
 
 class ExportTemplateTestCase(TestCase):
 class ExportTemplateTestCase(TestCase):
     queryset = ExportTemplate.objects.all()
     queryset = ExportTemplate.objects.all()
-    filterset = ExportTemplateFilter
+    filterset = ExportTemplateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -64,7 +64,7 @@ class ExportTemplateTestCase(TestCase):
 
 
 class ConfigContextTestCase(TestCase):
 class ConfigContextTestCase(TestCase):
     queryset = ConfigContext.objects.all()
     queryset = ConfigContext.objects.all()
-    filterset = ConfigContextFilter
+    filterset = ConfigContextFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):

+ 7 - 7
netbox/extras/views.py

@@ -31,8 +31,8 @@ class TagListView(PermissionRequiredMixin, ObjectListView):
     ).order_by(
     ).order_by(
         'name'
         'name'
     )
     )
-    filter = filters.TagFilter
-    filter_form = forms.TagFilterForm
+    filterset = filters.TagFilterSet
+    filterset_form = forms.TagFilterForm
     table = TagTable
     table = TagTable
     template_name = 'extras/tag_list.html'
     template_name = 'extras/tag_list.html'
 
 
@@ -108,8 +108,8 @@ class TagBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class ConfigContextListView(PermissionRequiredMixin, ObjectListView):
 class ConfigContextListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'extras.view_configcontext'
     permission_required = 'extras.view_configcontext'
     queryset = ConfigContext.objects.all()
     queryset = ConfigContext.objects.all()
-    filter = filters.ConfigContextFilter
-    filter_form = forms.ConfigContextFilterForm
+    filterset = filters.ConfigContextFilterSet
+    filterset_form = forms.ConfigContextFilterForm
     table = ConfigContextTable
     table = ConfigContextTable
     template_name = 'extras/configcontext_list.html'
     template_name = 'extras/configcontext_list.html'
 
 
@@ -141,7 +141,7 @@ class ConfigContextEditView(ConfigContextCreateView):
 class ConfigContextBulkEditView(PermissionRequiredMixin, BulkEditView):
 class ConfigContextBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'extras.change_configcontext'
     permission_required = 'extras.change_configcontext'
     queryset = ConfigContext.objects.all()
     queryset = ConfigContext.objects.all()
-    filter = filters.ConfigContextFilter
+    filterset = filters.ConfigContextFilterSet
     table = ConfigContextTable
     table = ConfigContextTable
     form = forms.ConfigContextBulkEditForm
     form = forms.ConfigContextBulkEditForm
     default_return_url = 'extras:configcontext_list'
     default_return_url = 'extras:configcontext_list'
@@ -187,8 +187,8 @@ class ObjectConfigContextView(View):
 class ObjectChangeListView(PermissionRequiredMixin, ObjectListView):
 class ObjectChangeListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'extras.view_objectchange'
     permission_required = 'extras.view_objectchange'
     queryset = ObjectChange.objects.prefetch_related('user', 'changed_object_type')
     queryset = ObjectChange.objects.prefetch_related('user', 'changed_object_type')
-    filter = filters.ObjectChangeFilter
-    filter_form = forms.ObjectChangeFilterForm
+    filterset = filters.ObjectChangeFilterSet
+    filterset_form = forms.ObjectChangeFilterForm
     table = ObjectChangeTable
     table = ObjectChangeTable
     template_name = 'extras/objectchange_list.html'
     template_name = 'extras/objectchange_list.html'
 
 

+ 9 - 9
netbox/ipam/api/views.py

@@ -38,7 +38,7 @@ class VRFViewSet(CustomFieldModelViewSet):
         prefix_count=get_subquery(Prefix, 'vrf')
         prefix_count=get_subquery(Prefix, 'vrf')
     )
     )
     serializer_class = serializers.VRFSerializer
     serializer_class = serializers.VRFSerializer
-    filterset_class = filters.VRFFilter
+    filterset_class = filters.VRFFilterSet
 
 
 
 
 #
 #
@@ -50,7 +50,7 @@ class RIRViewSet(ModelViewSet):
         aggregate_count=Count('aggregates')
         aggregate_count=Count('aggregates')
     )
     )
     serializer_class = serializers.RIRSerializer
     serializer_class = serializers.RIRSerializer
-    filterset_class = filters.RIRFilter
+    filterset_class = filters.RIRFilterSet
 
 
 
 
 #
 #
@@ -60,7 +60,7 @@ class RIRViewSet(ModelViewSet):
 class AggregateViewSet(CustomFieldModelViewSet):
 class AggregateViewSet(CustomFieldModelViewSet):
     queryset = Aggregate.objects.prefetch_related('rir').prefetch_related('tags')
     queryset = Aggregate.objects.prefetch_related('rir').prefetch_related('tags')
     serializer_class = serializers.AggregateSerializer
     serializer_class = serializers.AggregateSerializer
-    filterset_class = filters.AggregateFilter
+    filterset_class = filters.AggregateFilterSet
 
 
 
 
 #
 #
@@ -73,7 +73,7 @@ class RoleViewSet(ModelViewSet):
         vlan_count=get_subquery(VLAN, 'role')
         vlan_count=get_subquery(VLAN, 'role')
     )
     )
     serializer_class = serializers.RoleSerializer
     serializer_class = serializers.RoleSerializer
-    filterset_class = filters.RoleFilter
+    filterset_class = filters.RoleFilterSet
 
 
 
 
 #
 #
@@ -83,7 +83,7 @@ class RoleViewSet(ModelViewSet):
 class PrefixViewSet(CustomFieldModelViewSet):
 class PrefixViewSet(CustomFieldModelViewSet):
     queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role', 'tags')
     queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role', 'tags')
     serializer_class = serializers.PrefixSerializer
     serializer_class = serializers.PrefixSerializer
-    filterset_class = filters.PrefixFilter
+    filterset_class = filters.PrefixFilterSet
 
 
     @action(detail=True, url_path='available-prefixes', methods=['get', 'post'])
     @action(detail=True, url_path='available-prefixes', methods=['get', 'post'])
     def available_prefixes(self, request, pk=None):
     def available_prefixes(self, request, pk=None):
@@ -264,7 +264,7 @@ class IPAddressViewSet(CustomFieldModelViewSet):
         'nat_outside', 'tags',
         'nat_outside', 'tags',
     )
     )
     serializer_class = serializers.IPAddressSerializer
     serializer_class = serializers.IPAddressSerializer
-    filterset_class = filters.IPAddressFilter
+    filterset_class = filters.IPAddressFilterSet
 
 
 
 
 #
 #
@@ -276,7 +276,7 @@ class VLANGroupViewSet(ModelViewSet):
         vlan_count=Count('vlans')
         vlan_count=Count('vlans')
     )
     )
     serializer_class = serializers.VLANGroupSerializer
     serializer_class = serializers.VLANGroupSerializer
-    filterset_class = filters.VLANGroupFilter
+    filterset_class = filters.VLANGroupFilterSet
 
 
 
 
 #
 #
@@ -290,7 +290,7 @@ class VLANViewSet(CustomFieldModelViewSet):
         prefix_count=get_subquery(Prefix, 'role')
         prefix_count=get_subquery(Prefix, 'role')
     )
     )
     serializer_class = serializers.VLANSerializer
     serializer_class = serializers.VLANSerializer
-    filterset_class = filters.VLANFilter
+    filterset_class = filters.VLANFilterSet
 
 
 
 
 #
 #
@@ -300,4 +300,4 @@ class VLANViewSet(CustomFieldModelViewSet):
 class ServiceViewSet(ModelViewSet):
 class ServiceViewSet(ModelViewSet):
     queryset = Service.objects.prefetch_related('device').prefetch_related('tags')
     queryset = Service.objects.prefetch_related('device').prefetch_related('tags')
     serializer_class = serializers.ServiceSerializer
     serializer_class = serializers.ServiceSerializer
-    filterset_class = filters.ServiceFilter
+    filterset_class = filters.ServiceFilterSet

+ 19 - 19
netbox/ipam/filters.py

@@ -6,7 +6,7 @@ from netaddr.core import AddrFormatError
 
 
 from dcim.models import Device, Interface, Region, Site
 from dcim.models import Device, Interface, Region, Site
 from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
 from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
-from tenancy.filtersets import TenancyFilterSet
+from tenancy.filters import TenancyFilterSet
 from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
 from utilities.filters import NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter
 from virtualization.models import VirtualMachine
 from virtualization.models import VirtualMachine
 from .choices import *
 from .choices import *
@@ -14,19 +14,19 @@ from .models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLAN
 
 
 
 
 __all__ = (
 __all__ = (
-    'AggregateFilter',
-    'IPAddressFilter',
-    'PrefixFilter',
-    'RIRFilter',
-    'RoleFilter',
-    'ServiceFilter',
-    'VLANFilter',
-    'VLANGroupFilter',
-    'VRFFilter',
+    'AggregateFilterSet',
+    'IPAddressFilterSet',
+    'PrefixFilterSet',
+    'RIRFilterSet',
+    'RoleFilterSet',
+    'ServiceFilterSet',
+    'VLANFilterSet',
+    'VLANGroupFilterSet',
+    'VRFFilterSet',
 )
 )
 
 
 
 
-class VRFFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class VRFFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -51,7 +51,7 @@ class VRFFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet)
         fields = ['name', 'rd', 'enforce_unique']
         fields = ['name', 'rd', 'enforce_unique']
 
 
 
 
-class RIRFilter(NameSlugSearchFilterSet):
+class RIRFilterSet(NameSlugSearchFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -62,7 +62,7 @@ class RIRFilter(NameSlugSearchFilterSet):
         fields = ['name', 'slug', 'is_private']
         fields = ['name', 'slug', 'is_private']
 
 
 
 
-class AggregateFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class AggregateFilterSet(CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -112,7 +112,7 @@ class AggregateFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
             return queryset.none()
             return queryset.none()
 
 
 
 
-class RoleFilter(NameSlugSearchFilterSet):
+class RoleFilterSet(NameSlugSearchFilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',
@@ -123,7 +123,7 @@ class RoleFilter(NameSlugSearchFilterSet):
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class PrefixFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class PrefixFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -271,7 +271,7 @@ class PrefixFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterS
         return queryset.filter(prefix__net_mask_length=value)
         return queryset.filter(prefix__net_mask_length=value)
 
 
 
 
-class IPAddressFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class IPAddressFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -398,7 +398,7 @@ class IPAddressFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilt
         return queryset.exclude(interface__isnull=value)
         return queryset.exclude(interface__isnull=value)
 
 
 
 
-class VLANGroupFilter(NameSlugSearchFilterSet):
+class VLANGroupFilterSet(NameSlugSearchFilterSet):
     region_id = TreeNodeMultipleChoiceFilter(
     region_id = TreeNodeMultipleChoiceFilter(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         field_name='site__region__in',
         field_name='site__region__in',
@@ -426,7 +426,7 @@ class VLANGroupFilter(NameSlugSearchFilterSet):
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class VLANFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class VLANFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -497,7 +497,7 @@ class VLANFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet
         return queryset.filter(qs_filter)
         return queryset.filter(qs_filter)
 
 
 
 
-class ServiceFilter(CreatedUpdatedFilterSet):
+class ServiceFilterSet(CreatedUpdatedFilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',

+ 9 - 9
netbox/ipam/tests/test_filters.py

@@ -9,7 +9,7 @@ from virtualization.models import Cluster, ClusterType, VirtualMachine
 
 
 class VRFTestCase(TestCase):
 class VRFTestCase(TestCase):
     queryset = VRF.objects.all()
     queryset = VRF.objects.all()
-    filterset = VRFFilter
+    filterset = VRFFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -46,7 +46,7 @@ class VRFTestCase(TestCase):
 
 
 class RIRTestCase(TestCase):
 class RIRTestCase(TestCase):
     queryset = RIR.objects.all()
     queryset = RIR.objects.all()
-    filterset = RIRFilter
+    filterset = RIRFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -83,7 +83,7 @@ class RIRTestCase(TestCase):
 
 
 class AggregateTestCase(TestCase):
 class AggregateTestCase(TestCase):
     queryset = Aggregate.objects.all()
     queryset = Aggregate.objects.all()
-    filterset = AggregateFilter
+    filterset = AggregateFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -128,7 +128,7 @@ class AggregateTestCase(TestCase):
 
 
 class RoleTestCase(TestCase):
 class RoleTestCase(TestCase):
     queryset = Role.objects.all()
     queryset = Role.objects.all()
-    filterset = RoleFilter
+    filterset = RoleFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -156,7 +156,7 @@ class RoleTestCase(TestCase):
 
 
 class PrefixTestCase(TestCase):
 class PrefixTestCase(TestCase):
     queryset = Prefix.objects.all()
     queryset = Prefix.objects.all()
-    filterset = PrefixFilter
+    filterset = PrefixFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -288,7 +288,7 @@ class PrefixTestCase(TestCase):
 
 
 class IPAddressTestCase(TestCase):
 class IPAddressTestCase(TestCase):
     queryset = IPAddress.objects.all()
     queryset = IPAddress.objects.all()
-    filterset = IPAddressFilter
+    filterset = IPAddressFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -424,7 +424,7 @@ class IPAddressTestCase(TestCase):
 
 
 class VLANGroupTestCase(TestCase):
 class VLANGroupTestCase(TestCase):
     queryset = VLANGroup.objects.all()
     queryset = VLANGroup.objects.all()
-    filterset = VLANGroupFilter
+    filterset = VLANGroupFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -483,7 +483,7 @@ class VLANGroupTestCase(TestCase):
 
 
 class VLANTestCase(TestCase):
 class VLANTestCase(TestCase):
     queryset = VLAN.objects.all()
     queryset = VLAN.objects.all()
-    filterset = VLANFilter
+    filterset = VLANFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -576,7 +576,7 @@ class VLANTestCase(TestCase):
 
 
 class ServiceTestCase(TestCase):
 class ServiceTestCase(TestCase):
     queryset = Service.objects.all()
     queryset = Service.objects.all()
-    filterset = ServiceFilter
+    filterset = ServiceFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):

+ 30 - 30
netbox/ipam/views.py

@@ -117,8 +117,8 @@ def add_available_vlans(vlan_group, vlans):
 class VRFListView(PermissionRequiredMixin, ObjectListView):
 class VRFListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'ipam.view_vrf'
     permission_required = 'ipam.view_vrf'
     queryset = VRF.objects.prefetch_related('tenant')
     queryset = VRF.objects.prefetch_related('tenant')
-    filter = filters.VRFFilter
-    filter_form = forms.VRFFilterForm
+    filterset = filters.VRFFilterSet
+    filterset_form = forms.VRFFilterForm
     table = tables.VRFTable
     table = tables.VRFTable
     template_name = 'ipam/vrf_list.html'
     template_name = 'ipam/vrf_list.html'
 
 
@@ -165,7 +165,7 @@ class VRFBulkImportView(PermissionRequiredMixin, BulkImportView):
 class VRFBulkEditView(PermissionRequiredMixin, BulkEditView):
 class VRFBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'ipam.change_vrf'
     permission_required = 'ipam.change_vrf'
     queryset = VRF.objects.prefetch_related('tenant')
     queryset = VRF.objects.prefetch_related('tenant')
-    filter = filters.VRFFilter
+    filterset = filters.VRFFilterSet
     table = tables.VRFTable
     table = tables.VRFTable
     form = forms.VRFBulkEditForm
     form = forms.VRFBulkEditForm
     default_return_url = 'ipam:vrf_list'
     default_return_url = 'ipam:vrf_list'
@@ -174,7 +174,7 @@ class VRFBulkEditView(PermissionRequiredMixin, BulkEditView):
 class VRFBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class VRFBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'ipam.delete_vrf'
     permission_required = 'ipam.delete_vrf'
     queryset = VRF.objects.prefetch_related('tenant')
     queryset = VRF.objects.prefetch_related('tenant')
-    filter = filters.VRFFilter
+    filterset = filters.VRFFilterSet
     table = tables.VRFTable
     table = tables.VRFTable
     default_return_url = 'ipam:vrf_list'
     default_return_url = 'ipam:vrf_list'
 
 
@@ -186,8 +186,8 @@ class VRFBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RIRListView(PermissionRequiredMixin, ObjectListView):
 class RIRListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'ipam.view_rir'
     permission_required = 'ipam.view_rir'
     queryset = RIR.objects.annotate(aggregate_count=Count('aggregates'))
     queryset = RIR.objects.annotate(aggregate_count=Count('aggregates'))
-    filter = filters.RIRFilter
-    filter_form = forms.RIRFilterForm
+    filterset = filters.RIRFilterSet
+    filterset_form = forms.RIRFilterForm
     table = tables.RIRDetailTable
     table = tables.RIRDetailTable
     template_name = 'ipam/rir_list.html'
     template_name = 'ipam/rir_list.html'
 
 
@@ -281,7 +281,7 @@ class RIRBulkImportView(PermissionRequiredMixin, BulkImportView):
 class RIRBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class RIRBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'ipam.delete_rir'
     permission_required = 'ipam.delete_rir'
     queryset = RIR.objects.annotate(aggregate_count=Count('aggregates'))
     queryset = RIR.objects.annotate(aggregate_count=Count('aggregates'))
-    filter = filters.RIRFilter
+    filterset = filters.RIRFilterSet
     table = tables.RIRTable
     table = tables.RIRTable
     default_return_url = 'ipam:rir_list'
     default_return_url = 'ipam:rir_list'
 
 
@@ -296,8 +296,8 @@ class AggregateListView(PermissionRequiredMixin, ObjectListView):
         child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ())
         child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ())
     )
     )
 
 
-    filter = filters.AggregateFilter
-    filter_form = forms.AggregateFilterForm
+    filterset = filters.AggregateFilterSet
+    filterset_form = forms.AggregateFilterForm
     table = tables.AggregateDetailTable
     table = tables.AggregateDetailTable
     template_name = 'ipam/aggregate_list.html'
     template_name = 'ipam/aggregate_list.html'
 
 
@@ -391,7 +391,7 @@ class AggregateBulkImportView(PermissionRequiredMixin, BulkImportView):
 class AggregateBulkEditView(PermissionRequiredMixin, BulkEditView):
 class AggregateBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'ipam.change_aggregate'
     permission_required = 'ipam.change_aggregate'
     queryset = Aggregate.objects.prefetch_related('rir')
     queryset = Aggregate.objects.prefetch_related('rir')
-    filter = filters.AggregateFilter
+    filterset = filters.AggregateFilterSet
     table = tables.AggregateTable
     table = tables.AggregateTable
     form = forms.AggregateBulkEditForm
     form = forms.AggregateBulkEditForm
     default_return_url = 'ipam:aggregate_list'
     default_return_url = 'ipam:aggregate_list'
@@ -400,7 +400,7 @@ class AggregateBulkEditView(PermissionRequiredMixin, BulkEditView):
 class AggregateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class AggregateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'ipam.delete_aggregate'
     permission_required = 'ipam.delete_aggregate'
     queryset = Aggregate.objects.prefetch_related('rir')
     queryset = Aggregate.objects.prefetch_related('rir')
-    filter = filters.AggregateFilter
+    filterset = filters.AggregateFilterSet
     table = tables.AggregateTable
     table = tables.AggregateTable
     default_return_url = 'ipam:aggregate_list'
     default_return_url = 'ipam:aggregate_list'
 
 
@@ -448,8 +448,8 @@ class RoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class PrefixListView(PermissionRequiredMixin, ObjectListView):
 class PrefixListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'ipam.view_prefix'
     permission_required = 'ipam.view_prefix'
     queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
     queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
-    filter = filters.PrefixFilter
-    filter_form = forms.PrefixFilterForm
+    filterset = filters.PrefixFilterSet
+    filterset_form = forms.PrefixFilterForm
     table = tables.PrefixDetailTable
     table = tables.PrefixDetailTable
     template_name = 'ipam/prefix_list.html'
     template_name = 'ipam/prefix_list.html'
 
 
@@ -620,7 +620,7 @@ class PrefixBulkImportView(PermissionRequiredMixin, BulkImportView):
 class PrefixBulkEditView(PermissionRequiredMixin, BulkEditView):
 class PrefixBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'ipam.change_prefix'
     permission_required = 'ipam.change_prefix'
     queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
     queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
-    filter = filters.PrefixFilter
+    filterset = filters.PrefixFilterSet
     table = tables.PrefixTable
     table = tables.PrefixTable
     form = forms.PrefixBulkEditForm
     form = forms.PrefixBulkEditForm
     default_return_url = 'ipam:prefix_list'
     default_return_url = 'ipam:prefix_list'
@@ -629,7 +629,7 @@ class PrefixBulkEditView(PermissionRequiredMixin, BulkEditView):
 class PrefixBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class PrefixBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'ipam.delete_prefix'
     permission_required = 'ipam.delete_prefix'
     queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
     queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role')
-    filter = filters.PrefixFilter
+    filterset = filters.PrefixFilterSet
     table = tables.PrefixTable
     table = tables.PrefixTable
     default_return_url = 'ipam:prefix_list'
     default_return_url = 'ipam:prefix_list'
 
 
@@ -643,8 +643,8 @@ class IPAddressListView(PermissionRequiredMixin, ObjectListView):
     queryset = IPAddress.objects.prefetch_related(
     queryset = IPAddress.objects.prefetch_related(
         'vrf__tenant', 'tenant', 'nat_inside', 'interface__device', 'interface__virtual_machine'
         'vrf__tenant', 'tenant', 'nat_inside', 'interface__device', 'interface__virtual_machine'
     )
     )
-    filter = filters.IPAddressFilter
-    filter_form = forms.IPAddressFilterForm
+    filterset = filters.IPAddressFilterSet
+    filterset_form = forms.IPAddressFilterForm
     table = tables.IPAddressDetailTable
     table = tables.IPAddressDetailTable
     template_name = 'ipam/ipaddress_list.html'
     template_name = 'ipam/ipaddress_list.html'
 
 
@@ -796,7 +796,7 @@ class IPAddressBulkImportView(PermissionRequiredMixin, BulkImportView):
 class IPAddressBulkEditView(PermissionRequiredMixin, BulkEditView):
 class IPAddressBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'ipam.change_ipaddress'
     permission_required = 'ipam.change_ipaddress'
     queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant').prefetch_related('interface__device')
     queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant').prefetch_related('interface__device')
-    filter = filters.IPAddressFilter
+    filterset = filters.IPAddressFilterSet
     table = tables.IPAddressTable
     table = tables.IPAddressTable
     form = forms.IPAddressBulkEditForm
     form = forms.IPAddressBulkEditForm
     default_return_url = 'ipam:ipaddress_list'
     default_return_url = 'ipam:ipaddress_list'
@@ -805,7 +805,7 @@ class IPAddressBulkEditView(PermissionRequiredMixin, BulkEditView):
 class IPAddressBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class IPAddressBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'ipam.delete_ipaddress'
     permission_required = 'ipam.delete_ipaddress'
     queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant').prefetch_related('interface__device')
     queryset = IPAddress.objects.prefetch_related('vrf__tenant', 'tenant').prefetch_related('interface__device')
-    filter = filters.IPAddressFilter
+    filterset = filters.IPAddressFilterSet
     table = tables.IPAddressTable
     table = tables.IPAddressTable
     default_return_url = 'ipam:ipaddress_list'
     default_return_url = 'ipam:ipaddress_list'
 
 
@@ -817,8 +817,8 @@ class IPAddressBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class VLANGroupListView(PermissionRequiredMixin, ObjectListView):
 class VLANGroupListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'ipam.view_vlangroup'
     permission_required = 'ipam.view_vlangroup'
     queryset = VLANGroup.objects.prefetch_related('site').annotate(vlan_count=Count('vlans'))
     queryset = VLANGroup.objects.prefetch_related('site').annotate(vlan_count=Count('vlans'))
-    filter = filters.VLANGroupFilter
-    filter_form = forms.VLANGroupFilterForm
+    filterset = filters.VLANGroupFilterSet
+    filterset_form = forms.VLANGroupFilterForm
     table = tables.VLANGroupTable
     table = tables.VLANGroupTable
     template_name = 'ipam/vlangroup_list.html'
     template_name = 'ipam/vlangroup_list.html'
 
 
@@ -844,7 +844,7 @@ class VLANGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
 class VLANGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class VLANGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'ipam.delete_vlangroup'
     permission_required = 'ipam.delete_vlangroup'
     queryset = VLANGroup.objects.prefetch_related('site').annotate(vlan_count=Count('vlans'))
     queryset = VLANGroup.objects.prefetch_related('site').annotate(vlan_count=Count('vlans'))
-    filter = filters.VLANGroupFilter
+    filterset = filters.VLANGroupFilterSet
     table = tables.VLANGroupTable
     table = tables.VLANGroupTable
     default_return_url = 'ipam:vlangroup_list'
     default_return_url = 'ipam:vlangroup_list'
 
 
@@ -893,8 +893,8 @@ class VLANGroupVLANsView(PermissionRequiredMixin, View):
 class VLANListView(PermissionRequiredMixin, ObjectListView):
 class VLANListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'ipam.view_vlan'
     permission_required = 'ipam.view_vlan'
     queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role').prefetch_related('prefixes')
     queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role').prefetch_related('prefixes')
-    filter = filters.VLANFilter
-    filter_form = forms.VLANFilterForm
+    filterset = filters.VLANFilterSet
+    filterset_form = forms.VLANFilterForm
     table = tables.VLANDetailTable
     table = tables.VLANDetailTable
     template_name = 'ipam/vlan_list.html'
     template_name = 'ipam/vlan_list.html'
 
 
@@ -968,7 +968,7 @@ class VLANBulkImportView(PermissionRequiredMixin, BulkImportView):
 class VLANBulkEditView(PermissionRequiredMixin, BulkEditView):
 class VLANBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'ipam.change_vlan'
     permission_required = 'ipam.change_vlan'
     queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role')
     queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role')
-    filter = filters.VLANFilter
+    filterset = filters.VLANFilterSet
     table = tables.VLANTable
     table = tables.VLANTable
     form = forms.VLANBulkEditForm
     form = forms.VLANBulkEditForm
     default_return_url = 'ipam:vlan_list'
     default_return_url = 'ipam:vlan_list'
@@ -977,7 +977,7 @@ class VLANBulkEditView(PermissionRequiredMixin, BulkEditView):
 class VLANBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class VLANBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'ipam.delete_vlan'
     permission_required = 'ipam.delete_vlan'
     queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role')
     queryset = VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role')
-    filter = filters.VLANFilter
+    filterset = filters.VLANFilterSet
     table = tables.VLANTable
     table = tables.VLANTable
     default_return_url = 'ipam:vlan_list'
     default_return_url = 'ipam:vlan_list'
 
 
@@ -989,8 +989,8 @@ class VLANBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class ServiceListView(PermissionRequiredMixin, ObjectListView):
 class ServiceListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'ipam.view_service'
     permission_required = 'ipam.view_service'
     queryset = Service.objects.prefetch_related('device', 'virtual_machine')
     queryset = Service.objects.prefetch_related('device', 'virtual_machine')
-    filter = filters.ServiceFilter
-    filter_form = forms.ServiceFilterForm
+    filterset = filters.ServiceFilterSet
+    filterset_form = forms.ServiceFilterForm
     table = tables.ServiceTable
     table = tables.ServiceTable
     template_name = 'ipam/service_list.html'
     template_name = 'ipam/service_list.html'
 
 
@@ -1036,7 +1036,7 @@ class ServiceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
 class ServiceBulkEditView(PermissionRequiredMixin, BulkEditView):
 class ServiceBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'ipam.change_service'
     permission_required = 'ipam.change_service'
     queryset = Service.objects.prefetch_related('device', 'virtual_machine')
     queryset = Service.objects.prefetch_related('device', 'virtual_machine')
-    filter = filters.ServiceFilter
+    filterset = filters.ServiceFilterSet
     table = tables.ServiceTable
     table = tables.ServiceTable
     form = forms.ServiceBulkEditForm
     form = forms.ServiceBulkEditForm
     default_return_url = 'ipam:service_list'
     default_return_url = 'ipam:service_list'
@@ -1045,6 +1045,6 @@ class ServiceBulkEditView(PermissionRequiredMixin, BulkEditView):
 class ServiceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class ServiceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'ipam.delete_service'
     permission_required = 'ipam.delete_service'
     queryset = Service.objects.prefetch_related('device', 'virtual_machine')
     queryset = Service.objects.prefetch_related('device', 'virtual_machine')
-    filter = filters.ServiceFilter
+    filterset = filters.ServiceFilterSet
     table = tables.ServiceTable
     table = tables.ServiceTable
     default_return_url = 'ipam:service_list'
     default_return_url = 'ipam:service_list'

+ 28 - 28
netbox/netbox/views.py

@@ -7,12 +7,12 @@ from rest_framework.response import Response
 from rest_framework.reverse import reverse
 from rest_framework.reverse import reverse
 from rest_framework.views import APIView
 from rest_framework.views import APIView
 
 
-from circuits.filters import CircuitFilter, ProviderFilter
+from circuits.filters import CircuitFilterSet, ProviderFilterSet
 from circuits.models import Circuit, CircuitTermination, Provider
 from circuits.models import Circuit, CircuitTermination, Provider
 from circuits.tables import CircuitTable, ProviderTable
 from circuits.tables import CircuitTable, ProviderTable
 from dcim.filters import (
 from dcim.filters import (
-    CableFilter, DeviceFilter, DeviceTypeFilter, PowerFeedFilter, RackFilter, RackGroupFilter, SiteFilter,
-    VirtualChassisFilter,
+    CableFilterSet, DeviceFilterSet, DeviceTypeFilterSet, PowerFeedFilterSet, RackFilterSet, RackGroupFilterSet, SiteFilterSet,
+    VirtualChassisFilterSet,
 )
 )
 from dcim.models import (
 from dcim.models import (
     Cable, ConsolePort, Device, DeviceType, Interface, PowerPanel, PowerFeed, PowerPort, Rack, RackGroup, Site, VirtualChassis
     Cable, ConsolePort, Device, DeviceType, Interface, PowerPanel, PowerFeed, PowerPort, Rack, RackGroup, Site, VirtualChassis
@@ -22,16 +22,16 @@ from dcim.tables import (
     VirtualChassisTable,
     VirtualChassisTable,
 )
 )
 from extras.models import ObjectChange, ReportResult
 from extras.models import ObjectChange, ReportResult
-from ipam.filters import AggregateFilter, IPAddressFilter, PrefixFilter, VLANFilter, VRFFilter
+from ipam.filters import AggregateFilterSet, IPAddressFilterSet, PrefixFilterSet, VLANFilterSet, VRFFilterSet
 from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
 from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
 from ipam.tables import AggregateTable, IPAddressTable, PrefixTable, VLANTable, VRFTable
 from ipam.tables import AggregateTable, IPAddressTable, PrefixTable, VLANTable, VRFTable
-from secrets.filters import SecretFilter
+from secrets.filters import SecretFilterSet
 from secrets.models import Secret
 from secrets.models import Secret
 from secrets.tables import SecretTable
 from secrets.tables import SecretTable
-from tenancy.filters import TenantFilter
+from tenancy.filters import TenantFilterSet
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from tenancy.tables import TenantTable
 from tenancy.tables import TenantTable
-from virtualization.filters import ClusterFilter, VirtualMachineFilter
+from virtualization.filters import ClusterFilterSet, VirtualMachineFilterSet
 from virtualization.models import Cluster, VirtualMachine
 from virtualization.models import Cluster, VirtualMachine
 from virtualization.tables import ClusterTable, VirtualMachineDetailTable
 from virtualization.tables import ClusterTable, VirtualMachineDetailTable
 from .forms import SearchForm
 from .forms import SearchForm
@@ -42,7 +42,7 @@ SEARCH_TYPES = OrderedDict((
     ('provider', {
     ('provider', {
         'permission': 'circuits.view_provider',
         'permission': 'circuits.view_provider',
         'queryset': Provider.objects.all(),
         'queryset': Provider.objects.all(),
-        'filter': ProviderFilter,
+        'filterset': ProviderFilterSet,
         'table': ProviderTable,
         'table': ProviderTable,
         'url': 'circuits:provider_list',
         'url': 'circuits:provider_list',
     }),
     }),
@@ -59,7 +59,7 @@ SEARCH_TYPES = OrderedDict((
                 CircuitTermination.objects.filter(circuit=OuterRef('pk')).filter(term_side='Z').values('site__name')[:1]
                 CircuitTermination.objects.filter(circuit=OuterRef('pk')).filter(term_side='Z').values('site__name')[:1]
             ),
             ),
         ),
         ),
-        'filter': CircuitFilter,
+        'filterset': CircuitFilterSet,
         'table': CircuitTable,
         'table': CircuitTable,
         'url': 'circuits:circuit_list',
         'url': 'circuits:circuit_list',
     }),
     }),
@@ -67,28 +67,28 @@ SEARCH_TYPES = OrderedDict((
     ('site', {
     ('site', {
         'permission': 'dcim.view_site',
         'permission': 'dcim.view_site',
         'queryset': Site.objects.prefetch_related('region', 'tenant'),
         'queryset': Site.objects.prefetch_related('region', 'tenant'),
-        'filter': SiteFilter,
+        'filterset': SiteFilterSet,
         'table': SiteTable,
         'table': SiteTable,
         'url': 'dcim:site_list',
         'url': 'dcim:site_list',
     }),
     }),
     ('rack', {
     ('rack', {
         'permission': 'dcim.view_rack',
         'permission': 'dcim.view_rack',
         'queryset': Rack.objects.prefetch_related('site', 'group', 'tenant', 'role'),
         'queryset': Rack.objects.prefetch_related('site', 'group', 'tenant', 'role'),
-        'filter': RackFilter,
+        'filterset': RackFilterSet,
         'table': RackTable,
         'table': RackTable,
         'url': 'dcim:rack_list',
         'url': 'dcim:rack_list',
     }),
     }),
     ('rackgroup', {
     ('rackgroup', {
         'permission': 'dcim.view_rackgroup',
         'permission': 'dcim.view_rackgroup',
         'queryset': RackGroup.objects.prefetch_related('site').annotate(rack_count=Count('racks')),
         'queryset': RackGroup.objects.prefetch_related('site').annotate(rack_count=Count('racks')),
-        'filter': RackGroupFilter,
+        'filterset': RackGroupFilterSet,
         'table': RackGroupTable,
         'table': RackGroupTable,
         'url': 'dcim:rackgroup_list',
         'url': 'dcim:rackgroup_list',
     }),
     }),
     ('devicetype', {
     ('devicetype', {
         'permission': 'dcim.view_devicetype',
         'permission': 'dcim.view_devicetype',
         'queryset': DeviceType.objects.prefetch_related('manufacturer').annotate(instance_count=Count('instances')),
         'queryset': DeviceType.objects.prefetch_related('manufacturer').annotate(instance_count=Count('instances')),
-        'filter': DeviceTypeFilter,
+        'filterset': DeviceTypeFilterSet,
         'table': DeviceTypeTable,
         'table': DeviceTypeTable,
         'url': 'dcim:devicetype_list',
         'url': 'dcim:devicetype_list',
     }),
     }),
@@ -97,28 +97,28 @@ SEARCH_TYPES = OrderedDict((
         'queryset': Device.objects.prefetch_related(
         'queryset': Device.objects.prefetch_related(
             'device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack', 'primary_ip4', 'primary_ip6',
             'device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack', 'primary_ip4', 'primary_ip6',
         ),
         ),
-        'filter': DeviceFilter,
+        'filterset': DeviceFilterSet,
         'table': DeviceDetailTable,
         'table': DeviceDetailTable,
         'url': 'dcim:device_list',
         'url': 'dcim:device_list',
     }),
     }),
     ('virtualchassis', {
     ('virtualchassis', {
         'permission': 'dcim.view_virtualchassis',
         'permission': 'dcim.view_virtualchassis',
         'queryset': VirtualChassis.objects.prefetch_related('master').annotate(member_count=Count('members')),
         'queryset': VirtualChassis.objects.prefetch_related('master').annotate(member_count=Count('members')),
-        'filter': VirtualChassisFilter,
+        'filterset': VirtualChassisFilterSet,
         'table': VirtualChassisTable,
         'table': VirtualChassisTable,
         'url': 'dcim:virtualchassis_list',
         'url': 'dcim:virtualchassis_list',
     }),
     }),
     ('cable', {
     ('cable', {
         'permission': 'dcim.view_cable',
         'permission': 'dcim.view_cable',
         'queryset': Cable.objects.all(),
         'queryset': Cable.objects.all(),
-        'filter': CableFilter,
+        'filterset': CableFilterSet,
         'table': CableTable,
         'table': CableTable,
         'url': 'dcim:cable_list',
         'url': 'dcim:cable_list',
     }),
     }),
     ('powerfeed', {
     ('powerfeed', {
         'permission': 'dcim.view_powerfeed',
         'permission': 'dcim.view_powerfeed',
         'queryset': PowerFeed.objects.all(),
         'queryset': PowerFeed.objects.all(),
-        'filter': PowerFeedFilter,
+        'filterset': PowerFeedFilterSet,
         'table': PowerFeedTable,
         'table': PowerFeedTable,
         'url': 'dcim:powerfeed_list',
         'url': 'dcim:powerfeed_list',
     }),
     }),
@@ -126,7 +126,7 @@ SEARCH_TYPES = OrderedDict((
     ('cluster', {
     ('cluster', {
         'permission': 'virtualization.view_cluster',
         'permission': 'virtualization.view_cluster',
         'queryset': Cluster.objects.prefetch_related('type', 'group'),
         'queryset': Cluster.objects.prefetch_related('type', 'group'),
-        'filter': ClusterFilter,
+        'filterset': ClusterFilterSet,
         'table': ClusterTable,
         'table': ClusterTable,
         'url': 'virtualization:cluster_list',
         'url': 'virtualization:cluster_list',
     }),
     }),
@@ -135,7 +135,7 @@ SEARCH_TYPES = OrderedDict((
         'queryset': VirtualMachine.objects.prefetch_related(
         'queryset': VirtualMachine.objects.prefetch_related(
             'cluster', 'tenant', 'platform', 'primary_ip4', 'primary_ip6',
             'cluster', 'tenant', 'platform', 'primary_ip4', 'primary_ip6',
         ),
         ),
-        'filter': VirtualMachineFilter,
+        'filterset': VirtualMachineFilterSet,
         'table': VirtualMachineDetailTable,
         'table': VirtualMachineDetailTable,
         'url': 'virtualization:virtualmachine_list',
         'url': 'virtualization:virtualmachine_list',
     }),
     }),
@@ -143,35 +143,35 @@ SEARCH_TYPES = OrderedDict((
     ('vrf', {
     ('vrf', {
         'permission': 'ipam.view_vrf',
         'permission': 'ipam.view_vrf',
         'queryset': VRF.objects.prefetch_related('tenant'),
         'queryset': VRF.objects.prefetch_related('tenant'),
-        'filter': VRFFilter,
+        'filterset': VRFFilterSet,
         'table': VRFTable,
         'table': VRFTable,
         'url': 'ipam:vrf_list',
         'url': 'ipam:vrf_list',
     }),
     }),
     ('aggregate', {
     ('aggregate', {
         'permission': 'ipam.view_aggregate',
         'permission': 'ipam.view_aggregate',
         'queryset': Aggregate.objects.prefetch_related('rir'),
         'queryset': Aggregate.objects.prefetch_related('rir'),
-        'filter': AggregateFilter,
+        'filterset': AggregateFilterSet,
         'table': AggregateTable,
         'table': AggregateTable,
         'url': 'ipam:aggregate_list',
         'url': 'ipam:aggregate_list',
     }),
     }),
     ('prefix', {
     ('prefix', {
         'permission': 'ipam.view_prefix',
         'permission': 'ipam.view_prefix',
         'queryset': Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role'),
         'queryset': Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role'),
-        'filter': PrefixFilter,
+        'filterset': PrefixFilterSet,
         'table': PrefixTable,
         'table': PrefixTable,
         'url': 'ipam:prefix_list',
         'url': 'ipam:prefix_list',
     }),
     }),
     ('ipaddress', {
     ('ipaddress', {
         'permission': 'ipam.view_ipaddress',
         'permission': 'ipam.view_ipaddress',
         'queryset': IPAddress.objects.prefetch_related('vrf__tenant', 'tenant'),
         'queryset': IPAddress.objects.prefetch_related('vrf__tenant', 'tenant'),
-        'filter': IPAddressFilter,
+        'filterset': IPAddressFilterSet,
         'table': IPAddressTable,
         'table': IPAddressTable,
         'url': 'ipam:ipaddress_list',
         'url': 'ipam:ipaddress_list',
     }),
     }),
     ('vlan', {
     ('vlan', {
         'permission': 'ipam.view_vlan',
         'permission': 'ipam.view_vlan',
         'queryset': VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role'),
         'queryset': VLAN.objects.prefetch_related('site', 'group', 'tenant', 'role'),
-        'filter': VLANFilter,
+        'filterset': VLANFilterSet,
         'table': VLANTable,
         'table': VLANTable,
         'url': 'ipam:vlan_list',
         'url': 'ipam:vlan_list',
     }),
     }),
@@ -179,7 +179,7 @@ SEARCH_TYPES = OrderedDict((
     ('secret', {
     ('secret', {
         'permission': 'secrets.view_secret',
         'permission': 'secrets.view_secret',
         'queryset': Secret.objects.prefetch_related('role', 'device'),
         'queryset': Secret.objects.prefetch_related('role', 'device'),
-        'filter': SecretFilter,
+        'filterset': SecretFilterSet,
         'table': SecretTable,
         'table': SecretTable,
         'url': 'secrets:secret_list',
         'url': 'secrets:secret_list',
     }),
     }),
@@ -187,7 +187,7 @@ SEARCH_TYPES = OrderedDict((
     ('tenant', {
     ('tenant', {
         'permission': 'tenancy.view_tenant',
         'permission': 'tenancy.view_tenant',
         'queryset': Tenant.objects.prefetch_related('group'),
         'queryset': Tenant.objects.prefetch_related('group'),
-        'filter': TenantFilter,
+        'filterset': TenantFilterSet,
         'table': TenantTable,
         'table': TenantTable,
         'url': 'tenancy:tenant_list',
         'url': 'tenancy:tenant_list',
     }),
     }),
@@ -286,12 +286,12 @@ class SearchView(View):
             for obj_type in obj_types:
             for obj_type in obj_types:
 
 
                 queryset = SEARCH_TYPES[obj_type]['queryset']
                 queryset = SEARCH_TYPES[obj_type]['queryset']
-                filter_cls = SEARCH_TYPES[obj_type]['filter']
+                filterset = SEARCH_TYPES[obj_type]['filterset']
                 table = SEARCH_TYPES[obj_type]['table']
                 table = SEARCH_TYPES[obj_type]['table']
                 url = SEARCH_TYPES[obj_type]['url']
                 url = SEARCH_TYPES[obj_type]['url']
 
 
                 # Construct the results table for this object type
                 # Construct the results table for this object type
-                filtered_queryset = filter_cls({'q': form.cleaned_data['q']}, queryset=queryset).qs
+                filtered_queryset = filterset({'q': form.cleaned_data['q']}, queryset=queryset).qs
                 table = table(filtered_queryset, orderable=False)
                 table = table(filtered_queryset, orderable=False)
                 table.paginate(per_page=SEARCH_MAX_RESULTS)
                 table.paginate(per_page=SEARCH_MAX_RESULTS)
 
 

+ 2 - 2
netbox/secrets/api/views.py

@@ -38,7 +38,7 @@ class SecretRoleViewSet(ModelViewSet):
     )
     )
     serializer_class = serializers.SecretRoleSerializer
     serializer_class = serializers.SecretRoleSerializer
     permission_classes = [IsAuthenticated]
     permission_classes = [IsAuthenticated]
-    filterset_class = filters.SecretRoleFilter
+    filterset_class = filters.SecretRoleFilterSet
 
 
 
 
 #
 #
@@ -50,7 +50,7 @@ class SecretViewSet(ModelViewSet):
         'device__primary_ip4', 'device__primary_ip6', 'role', 'role__users', 'role__groups', 'tags',
         'device__primary_ip4', 'device__primary_ip6', 'role', 'role__users', 'role__groups', 'tags',
     )
     )
     serializer_class = serializers.SecretSerializer
     serializer_class = serializers.SecretSerializer
-    filterset_class = filters.SecretFilter
+    filterset_class = filters.SecretFilterSet
 
 
     master_key = None
     master_key = None
 
 

+ 4 - 4
netbox/secrets/filters.py

@@ -8,19 +8,19 @@ from .models import Secret, SecretRole
 
 
 
 
 __all__ = (
 __all__ = (
-    'SecretFilter',
-    'SecretRoleFilter',
+    'SecretFilterSet',
+    'SecretRoleFilterSet',
 )
 )
 
 
 
 
-class SecretRoleFilter(NameSlugSearchFilterSet):
+class SecretRoleFilterSet(NameSlugSearchFilterSet):
 
 
     class Meta:
     class Meta:
         model = SecretRole
         model = SecretRole
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class SecretFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class SecretFilterSet(CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'

+ 2 - 2
netbox/secrets/tests/test_filters.py

@@ -7,7 +7,7 @@ from secrets.models import Secret, SecretRole
 
 
 class SecretRoleTestCase(TestCase):
 class SecretRoleTestCase(TestCase):
     queryset = SecretRole.objects.all()
     queryset = SecretRole.objects.all()
-    filterset = SecretRoleFilter
+    filterset = SecretRoleFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -35,7 +35,7 @@ class SecretRoleTestCase(TestCase):
 
 
 class SecretTestCase(TestCase):
 class SecretTestCase(TestCase):
     queryset = Secret.objects.all()
     queryset = Secret.objects.all()
-    filterset = SecretFilter
+    filterset = SecretFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):

+ 4 - 4
netbox/secrets/views.py

@@ -70,8 +70,8 @@ class SecretRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class SecretListView(PermissionRequiredMixin, ObjectListView):
 class SecretListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'secrets.view_secret'
     permission_required = 'secrets.view_secret'
     queryset = Secret.objects.prefetch_related('role', 'device')
     queryset = Secret.objects.prefetch_related('role', 'device')
-    filter = filters.SecretFilter
-    filter_form = forms.SecretFilterForm
+    filterset = filters.SecretFilterSet
+    filterset_form = forms.SecretFilterForm
     table = tables.SecretTable
     table = tables.SecretTable
     template_name = 'secrets/secret_list.html'
     template_name = 'secrets/secret_list.html'
 
 
@@ -248,7 +248,7 @@ class SecretBulkImportView(BulkImportView):
 class SecretBulkEditView(PermissionRequiredMixin, BulkEditView):
 class SecretBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'secrets.change_secret'
     permission_required = 'secrets.change_secret'
     queryset = Secret.objects.prefetch_related('role', 'device')
     queryset = Secret.objects.prefetch_related('role', 'device')
-    filter = filters.SecretFilter
+    filterset = filters.SecretFilterSet
     table = tables.SecretTable
     table = tables.SecretTable
     form = forms.SecretBulkEditForm
     form = forms.SecretBulkEditForm
     default_return_url = 'secrets:secret_list'
     default_return_url = 'secrets:secret_list'
@@ -257,6 +257,6 @@ class SecretBulkEditView(PermissionRequiredMixin, BulkEditView):
 class SecretBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class SecretBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'secrets.delete_secret'
     permission_required = 'secrets.delete_secret'
     queryset = Secret.objects.prefetch_related('role', 'device')
     queryset = Secret.objects.prefetch_related('role', 'device')
-    filter = filters.SecretFilter
+    filterset = filters.SecretFilterSet
     table = tables.SecretTable
     table = tables.SecretTable
     default_return_url = 'secrets:secret_list'
     default_return_url = 'secrets:secret_list'

+ 2 - 2
netbox/tenancy/api/views.py

@@ -27,7 +27,7 @@ class TenantGroupViewSet(ModelViewSet):
         tenant_count=get_subquery(Tenant, 'group')
         tenant_count=get_subquery(Tenant, 'group')
     )
     )
     serializer_class = serializers.TenantGroupSerializer
     serializer_class = serializers.TenantGroupSerializer
-    filterset_class = filters.TenantGroupFilter
+    filterset_class = filters.TenantGroupFilterSet
 
 
 
 
 #
 #
@@ -49,4 +49,4 @@ class TenantViewSet(CustomFieldModelViewSet):
         vrf_count=get_subquery(VRF, 'tenant')
         vrf_count=get_subquery(VRF, 'tenant')
     )
     )
     serializer_class = serializers.TenantSerializer
     serializer_class = serializers.TenantSerializer
-    filterset_class = filters.TenantFilter
+    filterset_class = filters.TenantFilterSet

+ 33 - 4
netbox/tenancy/filters.py

@@ -7,19 +7,20 @@ from .models import Tenant, TenantGroup
 
 
 
 
 __all__ = (
 __all__ = (
-    'TenantFilter',
-    'TenantGroupFilter',
+    'TenancyFilterSet',
+    'TenantFilterSet',
+    'TenantGroupFilterSet',
 )
 )
 
 
 
 
-class TenantGroupFilter(NameSlugSearchFilterSet):
+class TenantGroupFilterSet(NameSlugSearchFilterSet):
 
 
     class Meta:
     class Meta:
         model = TenantGroup
         model = TenantGroup
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class TenantFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class TenantFilterSet(CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -53,3 +54,31 @@ class TenantFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
             Q(description__icontains=value) |
             Q(description__icontains=value) |
             Q(comments__icontains=value)
             Q(comments__icontains=value)
         )
         )
+
+
+class TenancyFilterSet(django_filters.FilterSet):
+    """
+    An inheritable FilterSet for models which support Tenant assignment.
+    """
+    tenant_group_id = django_filters.ModelMultipleChoiceFilter(
+        field_name='tenant__group__id',
+        queryset=TenantGroup.objects.all(),
+        to_field_name='id',
+        label='Tenant Group (ID)',
+    )
+    tenant_group = django_filters.ModelMultipleChoiceFilter(
+        field_name='tenant__group__slug',
+        queryset=TenantGroup.objects.all(),
+        to_field_name='slug',
+        label='Tenant Group (slug)',
+    )
+    tenant_id = django_filters.ModelMultipleChoiceFilter(
+        queryset=Tenant.objects.all(),
+        label='Tenant (ID)',
+    )
+    tenant = django_filters.ModelMultipleChoiceFilter(
+        field_name='tenant__slug',
+        queryset=Tenant.objects.all(),
+        to_field_name='slug',
+        label='Tenant (slug)',
+    )

+ 0 - 28
netbox/tenancy/filtersets.py

@@ -1,28 +0,0 @@
-import django_filters
-
-from .models import Tenant, TenantGroup
-
-
-class TenancyFilterSet(django_filters.FilterSet):
-    tenant_group_id = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenant__group__id',
-        queryset=TenantGroup.objects.all(),
-        to_field_name='id',
-        label='Tenant Group (ID)',
-    )
-    tenant_group = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenant__group__slug',
-        queryset=TenantGroup.objects.all(),
-        to_field_name='slug',
-        label='Tenant Group (slug)',
-    )
-    tenant_id = django_filters.ModelMultipleChoiceFilter(
-        queryset=Tenant.objects.all(),
-        label='Tenant (ID)',
-    )
-    tenant = django_filters.ModelMultipleChoiceFilter(
-        field_name='tenant__slug',
-        queryset=Tenant.objects.all(),
-        to_field_name='slug',
-        label='Tenant (slug)',
-    )

+ 2 - 2
netbox/tenancy/tests/test_filters.py

@@ -6,7 +6,7 @@ from tenancy.models import Tenant, TenantGroup
 
 
 class TenantGroupTestCase(TestCase):
 class TenantGroupTestCase(TestCase):
     queryset = TenantGroup.objects.all()
     queryset = TenantGroup.objects.all()
-    filterset = TenantGroupFilter
+    filterset = TenantGroupFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -34,7 +34,7 @@ class TenantGroupTestCase(TestCase):
 
 
 class TenantTestCase(TestCase):
 class TenantTestCase(TestCase):
     queryset = Tenant.objects.all()
     queryset = Tenant.objects.all()
-    filterset = TenantFilter
+    filterset = TenantFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):

+ 4 - 4
netbox/tenancy/views.py

@@ -57,8 +57,8 @@ class TenantGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class TenantListView(PermissionRequiredMixin, ObjectListView):
 class TenantListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'tenancy.view_tenant'
     permission_required = 'tenancy.view_tenant'
     queryset = Tenant.objects.prefetch_related('group')
     queryset = Tenant.objects.prefetch_related('group')
-    filter = filters.TenantFilter
-    filter_form = forms.TenantFilterForm
+    filterset = filters.TenantFilterSet
+    filterset_form = forms.TenantFilterForm
     table = tables.TenantTable
     table = tables.TenantTable
     template_name = 'tenancy/tenant_list.html'
     template_name = 'tenancy/tenant_list.html'
 
 
@@ -117,7 +117,7 @@ class TenantBulkImportView(PermissionRequiredMixin, BulkImportView):
 class TenantBulkEditView(PermissionRequiredMixin, BulkEditView):
 class TenantBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'tenancy.change_tenant'
     permission_required = 'tenancy.change_tenant'
     queryset = Tenant.objects.prefetch_related('group')
     queryset = Tenant.objects.prefetch_related('group')
-    filter = filters.TenantFilter
+    filterset = filters.TenantFilterSet
     table = tables.TenantTable
     table = tables.TenantTable
     form = forms.TenantBulkEditForm
     form = forms.TenantBulkEditForm
     default_return_url = 'tenancy:tenant_list'
     default_return_url = 'tenancy:tenant_list'
@@ -126,6 +126,6 @@ class TenantBulkEditView(PermissionRequiredMixin, BulkEditView):
 class TenantBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class TenantBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'tenancy.delete_tenant'
     permission_required = 'tenancy.delete_tenant'
     queryset = Tenant.objects.prefetch_related('group')
     queryset = Tenant.objects.prefetch_related('group')
-    filter = filters.TenantFilter
+    filterset = filters.TenantFilterSet
     table = tables.TenantTable
     table = tables.TenantTable
     default_return_url = 'tenancy:tenant_list'
     default_return_url = 'tenancy:tenant_list'

+ 14 - 14
netbox/utilities/views.py

@@ -70,8 +70,8 @@ class ObjectListView(View):
     template_name: The name of the template
     template_name: The name of the template
     """
     """
     queryset = None
     queryset = None
-    filter = None
-    filter_form = None
+    filterset = None
+    filterset_form = None
     table = None
     table = None
     template_name = None
     template_name = None
 
 
@@ -97,8 +97,8 @@ class ObjectListView(View):
         model = self.queryset.model
         model = self.queryset.model
         content_type = ContentType.objects.get_for_model(model)
         content_type = ContentType.objects.get_for_model(model)
 
 
-        if self.filter:
-            self.queryset = self.filter(request.GET, self.queryset).qs
+        if self.filterset:
+            self.queryset = self.filterset(request.GET, self.queryset).qs
 
 
         # If this type of object has one or more custom fields, prefetch any relevant custom field values
         # If this type of object has one or more custom fields, prefetch any relevant custom field values
         custom_fields = CustomField.objects.filter(
         custom_fields = CustomField.objects.filter(
@@ -161,7 +161,7 @@ class ObjectListView(View):
             'content_type': content_type,
             'content_type': content_type,
             'table': table,
             'table': table,
             'permissions': permissions,
             'permissions': permissions,
-            'filter_form': self.filter_form(request.GET, label_suffix='') if self.filter_form else None,
+            'filter_form': self.filterset_form(request.GET, label_suffix='') if self.filterset_form else None,
             'tags': tags,
             'tags': tags,
         }
         }
         context.update(self.extra_context())
         context.update(self.extra_context())
@@ -598,7 +598,7 @@ class BulkEditView(GetReturnURLMixin, View):
     """
     """
     queryset = None
     queryset = None
     parent_model = None
     parent_model = None
-    filter = None
+    filterset = None
     table = None
     table = None
     form = None
     form = None
     template_name = 'utilities/obj_bulk_edit.html'
     template_name = 'utilities/obj_bulk_edit.html'
@@ -617,8 +617,8 @@ class BulkEditView(GetReturnURLMixin, View):
             parent_obj = None
             parent_obj = None
 
 
         # Are we editing *all* objects in the queryset or just a selected subset?
         # Are we editing *all* objects in the queryset or just a selected subset?
-        if request.POST.get('_all') and self.filter is not None:
-            pk_list = [obj.pk for obj in self.filter(request.GET, model.objects.only('pk')).qs]
+        if request.POST.get('_all') and self.filterset is not None:
+            pk_list = [obj.pk for obj in self.filterset(request.GET, model.objects.only('pk')).qs]
         else:
         else:
             pk_list = [int(pk) for pk in request.POST.getlist('pk')]
             pk_list = [int(pk) for pk in request.POST.getlist('pk')]
 
 
@@ -719,7 +719,7 @@ class BulkDeleteView(GetReturnURLMixin, View):
     """
     """
     queryset = None
     queryset = None
     parent_model = None
     parent_model = None
-    filter = None
+    filterset = None
     table = None
     table = None
     form = None
     form = None
     template_name = 'utilities/obj_bulk_delete.html'
     template_name = 'utilities/obj_bulk_delete.html'
@@ -739,8 +739,8 @@ class BulkDeleteView(GetReturnURLMixin, View):
 
 
         # Are we deleting *all* objects in the queryset or just a selected subset?
         # Are we deleting *all* objects in the queryset or just a selected subset?
         if request.POST.get('_all'):
         if request.POST.get('_all'):
-            if self.filter is not None:
-                pk_list = [obj.pk for obj in self.filter(request.GET, model.objects.only('pk')).qs]
+            if self.filterset is not None:
+                pk_list = [obj.pk for obj in self.filterset(request.GET, model.objects.only('pk')).qs]
             else:
             else:
                 pk_list = model.objects.values_list('pk', flat=True)
                 pk_list = model.objects.values_list('pk', flat=True)
         else:
         else:
@@ -883,7 +883,7 @@ class BulkComponentCreateView(GetReturnURLMixin, View):
     form = None
     form = None
     model = None
     model = None
     model_form = None
     model_form = None
-    filter = None
+    filterset = None
     table = None
     table = None
     template_name = 'utilities/obj_bulk_add_component.html'
     template_name = 'utilities/obj_bulk_add_component.html'
 
 
@@ -893,8 +893,8 @@ class BulkComponentCreateView(GetReturnURLMixin, View):
         model_name = self.model._meta.verbose_name_plural
         model_name = self.model._meta.verbose_name_plural
 
 
         # Are we editing *all* objects in the queryset or just a selected subset?
         # Are we editing *all* objects in the queryset or just a selected subset?
-        if request.POST.get('_all') and self.filter is not None:
-            pk_list = [obj.pk for obj in self.filter(request.GET, self.parent_model.objects.only('pk')).qs]
+        if request.POST.get('_all') and self.filterset is not None:
+            pk_list = [obj.pk for obj in self.filterset(request.GET, self.parent_model.objects.only('pk')).qs]
         else:
         else:
             pk_list = [int(pk) for pk in request.POST.getlist('pk')]
             pk_list = [int(pk) for pk in request.POST.getlist('pk')]
 
 

+ 5 - 5
netbox/virtualization/api/views.py

@@ -28,7 +28,7 @@ class ClusterTypeViewSet(ModelViewSet):
         cluster_count=Count('clusters')
         cluster_count=Count('clusters')
     )
     )
     serializer_class = serializers.ClusterTypeSerializer
     serializer_class = serializers.ClusterTypeSerializer
-    filterset_class = filters.ClusterTypeFilter
+    filterset_class = filters.ClusterTypeFilterSet
 
 
 
 
 class ClusterGroupViewSet(ModelViewSet):
 class ClusterGroupViewSet(ModelViewSet):
@@ -36,7 +36,7 @@ class ClusterGroupViewSet(ModelViewSet):
         cluster_count=Count('clusters')
         cluster_count=Count('clusters')
     )
     )
     serializer_class = serializers.ClusterGroupSerializer
     serializer_class = serializers.ClusterGroupSerializer
-    filterset_class = filters.ClusterGroupFilter
+    filterset_class = filters.ClusterGroupFilterSet
 
 
 
 
 class ClusterViewSet(CustomFieldModelViewSet):
 class ClusterViewSet(CustomFieldModelViewSet):
@@ -47,7 +47,7 @@ class ClusterViewSet(CustomFieldModelViewSet):
         virtualmachine_count=get_subquery(VirtualMachine, 'cluster')
         virtualmachine_count=get_subquery(VirtualMachine, 'cluster')
     )
     )
     serializer_class = serializers.ClusterSerializer
     serializer_class = serializers.ClusterSerializer
-    filterset_class = filters.ClusterFilter
+    filterset_class = filters.ClusterFilterSet
 
 
 
 
 #
 #
@@ -58,7 +58,7 @@ class VirtualMachineViewSet(CustomFieldModelViewSet):
     queryset = VirtualMachine.objects.prefetch_related(
     queryset = VirtualMachine.objects.prefetch_related(
         'cluster__site', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6', 'tags'
         'cluster__site', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6', 'tags'
     )
     )
-    filterset_class = filters.VirtualMachineFilter
+    filterset_class = filters.VirtualMachineFilterSet
 
 
     def get_serializer_class(self):
     def get_serializer_class(self):
         """
         """
@@ -88,7 +88,7 @@ class InterfaceViewSet(ModelViewSet):
         'virtual_machine', 'tags'
         'virtual_machine', 'tags'
     )
     )
     serializer_class = serializers.InterfaceSerializer
     serializer_class = serializers.InterfaceSerializer
-    filterset_class = filters.InterfaceFilter
+    filterset_class = filters.InterfaceFilterSet
 
 
     def get_serializer_class(self):
     def get_serializer_class(self):
         request = self.get_serializer_context()['request']
         request = self.get_serializer_context()['request']

+ 11 - 11
netbox/virtualization/filters.py

@@ -3,7 +3,7 @@ from django.db.models import Q
 
 
 from dcim.models import DeviceRole, Interface, Platform, Region, Site
 from dcim.models import DeviceRole, Interface, Platform, Region, Site
 from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
 from extras.filters import CustomFieldFilterSet, CreatedUpdatedFilterSet
-from tenancy.filtersets import TenancyFilterSet
+from tenancy.filters import TenancyFilterSet
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from utilities.filters import (
 from utilities.filters import (
     MultiValueMACAddressFilter, NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter,
     MultiValueMACAddressFilter, NameSlugSearchFilterSet, NumericInFilter, TagFilter, TreeNodeMultipleChoiceFilter,
@@ -13,29 +13,29 @@ from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 
 
 
 
 __all__ = (
 __all__ = (
-    'ClusterFilter',
-    'ClusterGroupFilter',
-    'ClusterTypeFilter',
-    'InterfaceFilter',
-    'VirtualMachineFilter',
+    'ClusterFilterSet',
+    'ClusterGroupFilterSet',
+    'ClusterTypeFilterSet',
+    'InterfaceFilterSet',
+    'VirtualMachineFilterSet',
 )
 )
 
 
 
 
-class ClusterTypeFilter(NameSlugSearchFilterSet):
+class ClusterTypeFilterSet(NameSlugSearchFilterSet):
 
 
     class Meta:
     class Meta:
         model = ClusterType
         model = ClusterType
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class ClusterGroupFilter(NameSlugSearchFilterSet):
+class ClusterGroupFilterSet(NameSlugSearchFilterSet):
 
 
     class Meta:
     class Meta:
         model = ClusterGroup
         model = ClusterGroup
         fields = ['id', 'name', 'slug']
         fields = ['id', 'name', 'slug']
 
 
 
 
-class ClusterFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class ClusterFilterSet(CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -104,7 +104,7 @@ class ClusterFilter(CustomFieldFilterSet, CreatedUpdatedFilterSet):
         )
         )
 
 
 
 
-class VirtualMachineFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
+class VirtualMachineFilterSet(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterSet):
     id__in = NumericInFilter(
     id__in = NumericInFilter(
         field_name='id',
         field_name='id',
         lookup_expr='in'
         lookup_expr='in'
@@ -204,7 +204,7 @@ class VirtualMachineFilter(TenancyFilterSet, CustomFieldFilterSet, CreatedUpdate
         )
         )
 
 
 
 
-class InterfaceFilter(django_filters.FilterSet):
+class InterfaceFilterSet(django_filters.FilterSet):
     q = django_filters.CharFilter(
     q = django_filters.CharFilter(
         method='search',
         method='search',
         label='Search',
         label='Search',

+ 5 - 5
netbox/virtualization/tests/test_filters.py

@@ -8,7 +8,7 @@ from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMac
 
 
 class ClusterTypeTestCase(TestCase):
 class ClusterTypeTestCase(TestCase):
     queryset = ClusterType.objects.all()
     queryset = ClusterType.objects.all()
-    filterset = ClusterTypeFilter
+    filterset = ClusterTypeFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -36,7 +36,7 @@ class ClusterTypeTestCase(TestCase):
 
 
 class ClusterGroupTestCase(TestCase):
 class ClusterGroupTestCase(TestCase):
     queryset = ClusterGroup.objects.all()
     queryset = ClusterGroup.objects.all()
-    filterset = ClusterGroupFilter
+    filterset = ClusterGroupFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -64,7 +64,7 @@ class ClusterGroupTestCase(TestCase):
 
 
 class ClusterTestCase(TestCase):
 class ClusterTestCase(TestCase):
     queryset = Cluster.objects.all()
     queryset = Cluster.objects.all()
-    filterset = ClusterFilter
+    filterset = ClusterFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -146,7 +146,7 @@ class ClusterTestCase(TestCase):
 
 
 class VirtualMachineTestCase(TestCase):
 class VirtualMachineTestCase(TestCase):
     queryset = VirtualMachine.objects.all()
     queryset = VirtualMachine.objects.all()
-    filterset = VirtualMachineFilter
+    filterset = VirtualMachineFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):
@@ -303,7 +303,7 @@ class VirtualMachineTestCase(TestCase):
 
 
 class InterfaceTestCase(TestCase):
 class InterfaceTestCase(TestCase):
     queryset = Interface.objects.all()
     queryset = Interface.objects.all()
-    filterset = InterfaceFilter
+    filterset = InterfaceFilterSet
 
 
     @classmethod
     @classmethod
     def setUpTestData(cls):
     def setUpTestData(cls):

+ 9 - 9
netbox/virtualization/views.py

@@ -98,8 +98,8 @@ class ClusterListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'virtualization.view_cluster'
     permission_required = 'virtualization.view_cluster'
     queryset = Cluster.objects.prefetch_related('type', 'group', 'site', 'tenant')
     queryset = Cluster.objects.prefetch_related('type', 'group', 'site', 'tenant')
     table = tables.ClusterTable
     table = tables.ClusterTable
-    filter = filters.ClusterFilter
-    filter_form = forms.ClusterFilterForm
+    filterset = filters.ClusterFilterSet
+    filterset_form = forms.ClusterFilterForm
     template_name = 'virtualization/cluster_list.html'
     template_name = 'virtualization/cluster_list.html'
 
 
 
 
@@ -149,7 +149,7 @@ class ClusterBulkImportView(PermissionRequiredMixin, BulkImportView):
 class ClusterBulkEditView(PermissionRequiredMixin, BulkEditView):
 class ClusterBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'virtualization.change_cluster'
     permission_required = 'virtualization.change_cluster'
     queryset = Cluster.objects.prefetch_related('type', 'group', 'site')
     queryset = Cluster.objects.prefetch_related('type', 'group', 'site')
-    filter = filters.ClusterFilter
+    filterset = filters.ClusterFilterSet
     table = tables.ClusterTable
     table = tables.ClusterTable
     form = forms.ClusterBulkEditForm
     form = forms.ClusterBulkEditForm
     default_return_url = 'virtualization:cluster_list'
     default_return_url = 'virtualization:cluster_list'
@@ -158,7 +158,7 @@ class ClusterBulkEditView(PermissionRequiredMixin, BulkEditView):
 class ClusterBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class ClusterBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'virtualization.delete_cluster'
     permission_required = 'virtualization.delete_cluster'
     queryset = Cluster.objects.prefetch_related('type', 'group', 'site')
     queryset = Cluster.objects.prefetch_related('type', 'group', 'site')
-    filter = filters.ClusterFilter
+    filterset = filters.ClusterFilterSet
     table = tables.ClusterTable
     table = tables.ClusterTable
     default_return_url = 'virtualization:cluster_list'
     default_return_url = 'virtualization:cluster_list'
 
 
@@ -254,8 +254,8 @@ class ClusterRemoveDevicesView(PermissionRequiredMixin, View):
 class VirtualMachineListView(PermissionRequiredMixin, ObjectListView):
 class VirtualMachineListView(PermissionRequiredMixin, ObjectListView):
     permission_required = 'virtualization.view_virtualmachine'
     permission_required = 'virtualization.view_virtualmachine'
     queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role', 'primary_ip4', 'primary_ip6')
     queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role', 'primary_ip4', 'primary_ip6')
-    filter = filters.VirtualMachineFilter
-    filter_form = forms.VirtualMachineFilterForm
+    filterset = filters.VirtualMachineFilterSet
+    filterset_form = forms.VirtualMachineFilterForm
     table = tables.VirtualMachineDetailTable
     table = tables.VirtualMachineDetailTable
     template_name = 'virtualization/virtualmachine_list.html'
     template_name = 'virtualization/virtualmachine_list.html'
 
 
@@ -310,7 +310,7 @@ class VirtualMachineBulkImportView(PermissionRequiredMixin, BulkImportView):
 class VirtualMachineBulkEditView(PermissionRequiredMixin, BulkEditView):
 class VirtualMachineBulkEditView(PermissionRequiredMixin, BulkEditView):
     permission_required = 'virtualization.change_virtualmachine'
     permission_required = 'virtualization.change_virtualmachine'
     queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role')
     queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role')
-    filter = filters.VirtualMachineFilter
+    filterset = filters.VirtualMachineFilterSet
     table = tables.VirtualMachineTable
     table = tables.VirtualMachineTable
     form = forms.VirtualMachineBulkEditForm
     form = forms.VirtualMachineBulkEditForm
     default_return_url = 'virtualization:virtualmachine_list'
     default_return_url = 'virtualization:virtualmachine_list'
@@ -319,7 +319,7 @@ class VirtualMachineBulkEditView(PermissionRequiredMixin, BulkEditView):
 class VirtualMachineBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
 class VirtualMachineBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'virtualization.delete_virtualmachine'
     permission_required = 'virtualization.delete_virtualmachine'
     queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role')
     queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role')
-    filter = filters.VirtualMachineFilter
+    filterset = filters.VirtualMachineFilterSet
     table = tables.VirtualMachineTable
     table = tables.VirtualMachineTable
     default_return_url = 'virtualization:virtualmachine_list'
     default_return_url = 'virtualization:virtualmachine_list'
 
 
@@ -376,6 +376,6 @@ class VirtualMachineBulkAddInterfaceView(PermissionRequiredMixin, BulkComponentC
     form = forms.VirtualMachineBulkAddInterfaceForm
     form = forms.VirtualMachineBulkAddInterfaceForm
     model = Interface
     model = Interface
     model_form = forms.InterfaceForm
     model_form = forms.InterfaceForm
-    filter = filters.VirtualMachineFilter
+    filterset = filters.VirtualMachineFilterSet
     table = tables.VirtualMachineTable
     table = tables.VirtualMachineTable
     default_return_url = 'virtualization:virtualmachine_list'
     default_return_url = 'virtualization:virtualmachine_list'