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

Fixes #3729: Standardize FilterSet names
This commit is contained in:
Jeremy Stretch 2020-01-10 08:58:17 -05:00 committed by GitHub
commit 03b22594e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 458 additions and 457 deletions

View File

@ -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

View File

@ -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', 'CircuitFilterSet',
'CircuitTerminationFilter', 'CircuitTerminationFilterSet',
'CircuitTypeFilter', 'CircuitTypeFilterSet',
'ProviderFilter', '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',

View File

@ -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):

View File

@ -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 filterset = filters.ProviderFilterSet
filter_form = forms.ProviderFilterForm 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 filterset = filters.CircuitFilterSet
filter_form = forms.CircuitFilterForm 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'

View File

@ -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
# #

View File

@ -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 extras.filters import CustomFieldFilterSet, LocalConfigContextFilterSet, CreatedUpdatedFilterSet
from tenancy.filtersets import TenancyFilterSet 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', 'CableFilterSet',
'ConsoleConnectionFilter', 'ConsoleConnectionFilterSet',
'ConsolePortFilter', 'ConsolePortFilterSet',
'ConsolePortTemplateFilter', 'ConsolePortTemplateFilterSet',
'ConsoleServerPortFilter', 'ConsoleServerPortFilterSet',
'ConsoleServerPortTemplateFilter', 'ConsoleServerPortTemplateFilterSet',
'DeviceBayFilter', 'DeviceBayFilterSet',
'DeviceBayTemplateFilter', 'DeviceBayTemplateFilterSet',
'DeviceFilter', 'DeviceFilterSet',
'DeviceRoleFilter', 'DeviceRoleFilterSet',
'DeviceTypeFilter', 'DeviceTypeFilterSet',
'FrontPortFilter', 'FrontPortFilterSet',
'FrontPortTemplateFilter', 'FrontPortTemplateFilterSet',
'InterfaceConnectionFilter', 'InterfaceConnectionFilterSet',
'InterfaceFilter', 'InterfaceFilterSet',
'InterfaceTemplateFilter', 'InterfaceTemplateFilterSet',
'InventoryItemFilter', 'InventoryItemFilterSet',
'ManufacturerFilter', 'ManufacturerFilterSet',
'PlatformFilter', 'PlatformFilterSet',
'PowerConnectionFilter', 'PowerConnectionFilterSet',
'PowerFeedFilter', 'PowerFeedFilterSet',
'PowerOutletFilter', 'PowerOutletFilterSet',
'PowerOutletTemplateFilter', 'PowerOutletTemplateFilterSet',
'PowerPanelFilter', 'PowerPanelFilterSet',
'PowerPortFilter', 'PowerPortFilterSet',
'PowerPortTemplateFilter', 'PowerPortTemplateFilterSet',
'RackFilter', 'RackFilterSet',
'RackGroupFilter', 'RackGroupFilterSet',
'RackReservationFilter', 'RackReservationFilterSet',
'RackRoleFilter', 'RackRoleFilterSet',
'RearPortFilter', 'RearPortFilterSet',
'RearPortTemplateFilter', 'RearPortTemplateFilterSet',
'RegionFilter', 'RegionFilterSet',
'SiteFilter', 'SiteFilterSet',
'VirtualChassisFilter', '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'

View File

@ -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):

View File

@ -148,8 +148,8 @@ class RegionListView(PermissionRequiredMixin, ObjectListView):
'site_count', 'site_count',
cumulative=True cumulative=True
) )
filter = filters.RegionFilter filterset = filters.RegionFilterSet
filter_form = forms.RegionFilterForm 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 filterset = filters.SiteFilterSet
filter_form = forms.SiteFilterForm 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 filterset = filters.RackGroupFilterSet
filter_form = forms.RackGroupFilterForm 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 filterset = filters.RackFilterSet
filter_form = forms.RackFilterForm 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 filterset = filters.RackReservationFilterSet
filter_form = forms.RackReservationFilterForm 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 filterset = filters.DeviceTypeFilterSet
filter_form = forms.DeviceTypeFilterForm 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 filterset = filters.DeviceFilterSet
filter_form = forms.DeviceFilterForm 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 filterset = filters.ConsolePortFilterSet
filter_form = forms.ConsolePortFilterForm 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 filterset = filters.ConsoleServerPortFilterSet
filter_form = forms.ConsoleServerPortFilterForm 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 filterset = filters.PowerPortFilterSet
filter_form = forms.PowerPortFilterForm 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 filterset = filters.PowerOutletFilterSet
filter_form = forms.PowerOutletFilterForm 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 filterset = filters.InterfaceFilterSet
filter_form = forms.InterfaceFilterForm 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 filterset = filters.FrontPortFilterSet
filter_form = forms.FrontPortFilterForm 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 filterset = filters.RearPortFilterSet
filter_form = forms.RearPortFilterForm 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 filterset = filters.DeviceBayFilterSet
filter_form = forms.DeviceBayFilterForm 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 filterset = filters.CableFilterSet
filter_form = forms.CableFilterForm 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 filterset = filters.ConsoleConnectionFilterSet
filter_form = forms.ConsoleConnectionFilterForm 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 filterset = filters.PowerConnectionFilterSet
filter_form = forms.PowerConnectionFilterForm 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 filterset = filters.InterfaceConnectionFilterSet
filter_form = forms.InterfaceConnectionFilterForm 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 filterset = filters.InventoryItemFilterSet
filter_form = forms.InventoryItemFilterForm 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 filterset = filters.VirtualChassisFilterSet
filter_form = forms.VirtualChassisFilterForm 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 filterset = filters.PowerPanelFilterSet
filter_form = forms.PowerPanelFilterForm 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 filterset = filters.PowerFeedFilterSet
filter_form = forms.PowerFeedFilterForm 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'

View File

@ -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

View File

@ -9,15 +9,15 @@ from .models import ConfigContext, CustomField, Graph, ExportTemplate, ObjectCha
__all__ = ( __all__ = (
'ConfigContextFilter', 'ConfigContextFilterSet',
'CreatedUpdatedFilterSet', 'CreatedUpdatedFilterSet',
'CustomFieldFilter', 'CustomFieldFilter',
'CustomFieldFilterSet', 'CustomFieldFilterSet',
'ExportTemplateFilter', 'ExportTemplateFilterSet',
'GraphFilter', 'GraphFilterSet',
'LocalConfigContextFilter', 'LocalConfigContextFilterSet',
'ObjectChangeFilter', 'ObjectChangeFilterSet',
'TagFilter', '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',

View File

@ -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):

View File

@ -31,8 +31,8 @@ class TagListView(PermissionRequiredMixin, ObjectListView):
).order_by( ).order_by(
'name' 'name'
) )
filter = filters.TagFilter filterset = filters.TagFilterSet
filter_form = forms.TagFilterForm 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 filterset = filters.ConfigContextFilterSet
filter_form = forms.ConfigContextFilterForm 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 filterset = filters.ObjectChangeFilterSet
filter_form = forms.ObjectChangeFilterForm filterset_form = forms.ObjectChangeFilterForm
table = ObjectChangeTable table = ObjectChangeTable
template_name = 'extras/objectchange_list.html' template_name = 'extras/objectchange_list.html'

View File

@ -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

View File

@ -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', 'AggregateFilterSet',
'IPAddressFilter', 'IPAddressFilterSet',
'PrefixFilter', 'PrefixFilterSet',
'RIRFilter', 'RIRFilterSet',
'RoleFilter', 'RoleFilterSet',
'ServiceFilter', 'ServiceFilterSet',
'VLANFilter', 'VLANFilterSet',
'VLANGroupFilter', 'VLANGroupFilterSet',
'VRFFilter', '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',

View File

@ -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):

View File

@ -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 filterset = filters.VRFFilterSet
filter_form = forms.VRFFilterForm 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 filterset = filters.RIRFilterSet
filter_form = forms.RIRFilterForm 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 filterset = filters.AggregateFilterSet
filter_form = forms.AggregateFilterForm 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 filterset = filters.PrefixFilterSet
filter_form = forms.PrefixFilterForm 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 filterset = filters.IPAddressFilterSet
filter_form = forms.IPAddressFilterForm 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 filterset = filters.VLANGroupFilterSet
filter_form = forms.VLANGroupFilterForm 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 filterset = filters.VLANFilterSet
filter_form = forms.VLANFilterForm 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 filterset = filters.ServiceFilterSet
filter_form = forms.ServiceFilterForm 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'

View File

@ -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, CableFilterSet, DeviceFilterSet, DeviceTypeFilterSet, PowerFeedFilterSet, RackFilterSet, RackGroupFilterSet, SiteFilterSet,
VirtualChassisFilter, 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)

View File

@ -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

View File

@ -8,19 +8,19 @@ from .models import Secret, SecretRole
__all__ = ( __all__ = (
'SecretFilter', 'SecretFilterSet',
'SecretRoleFilter', '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'

View File

@ -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):

View File

@ -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 filterset = filters.SecretFilterSet
filter_form = forms.SecretFilterForm 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'

View File

@ -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

View File

@ -7,19 +7,20 @@ from .models import Tenant, TenantGroup
__all__ = ( __all__ = (
'TenantFilter', 'TenancyFilterSet',
'TenantGroupFilter', '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)',
)

View File

@ -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)',
)

View File

@ -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):

View File

@ -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 filterset = filters.TenantFilterSet
filter_form = forms.TenantFilterForm 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'

View File

@ -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 filterset = None
filter_form = 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: if self.filterset:
self.queryset = self.filter(request.GET, self.queryset).qs 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: if request.POST.get('_all') and self.filterset is not None:
pk_list = [obj.pk for obj in self.filter(request.GET, model.objects.only('pk')).qs] 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: if self.filterset is not None:
pk_list = [obj.pk for obj in self.filter(request.GET, model.objects.only('pk')).qs] 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: if request.POST.get('_all') and self.filterset is not None:
pk_list = [obj.pk for obj in self.filter(request.GET, self.parent_model.objects.only('pk')).qs] 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')]

View File

@ -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']

View File

@ -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', 'ClusterFilterSet',
'ClusterGroupFilter', 'ClusterGroupFilterSet',
'ClusterTypeFilter', 'ClusterTypeFilterSet',
'InterfaceFilter', 'InterfaceFilterSet',
'VirtualMachineFilter', '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',

View File

@ -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):

View File

@ -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 filterset = filters.ClusterFilterSet
filter_form = forms.ClusterFilterForm 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 filterset = filters.VirtualMachineFilterSet
filter_form = forms.VirtualMachineFilterForm 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'