diff --git a/netbox/circuits/api/views.py b/netbox/circuits/api/views.py index 79c4452d2..fec22f604 100644 --- a/netbox/circuits/api/views.py +++ b/netbox/circuits/api/views.py @@ -52,7 +52,7 @@ class CircuitTypeViewSet(ModelViewSet): class CircuitViewSet(CustomFieldModelViewSet): queryset = Circuit.objects.prefetch_related( - Prefetch('terminations', queryset=CircuitTermination.objects.unrestricted().prefetch_related( + Prefetch('terminations', queryset=CircuitTermination.objects.prefetch_related( 'site', 'connected_endpoint__device' )), 'type', 'tenant', 'provider', diff --git a/netbox/circuits/filters.py b/netbox/circuits/filters.py index a81d6acca..206dcc305 100644 --- a/netbox/circuits/filters.py +++ b/netbox/circuits/filters.py @@ -24,13 +24,13 @@ class ProviderFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilte label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='circuits__terminations__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='circuits__terminations__site__region', lookup_expr='in', to_field_name='slug', @@ -38,12 +38,12 @@ class ProviderFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilte ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='circuits__terminations__site', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site', ) site = django_filters.ModelMultipleChoiceFilter( field_name='circuits__terminations__site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) @@ -78,22 +78,22 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, Cr label='Search', ) provider_id = django_filters.ModelMultipleChoiceFilter( - queryset=Provider.objects.unrestricted(), + queryset=Provider.objects.all(), label='Provider (ID)', ) provider = django_filters.ModelMultipleChoiceFilter( field_name='provider__slug', - queryset=Provider.objects.unrestricted(), + queryset=Provider.objects.all(), to_field_name='slug', label='Provider (slug)', ) type_id = django_filters.ModelMultipleChoiceFilter( - queryset=CircuitType.objects.unrestricted(), + queryset=CircuitType.objects.all(), label='Circuit type (ID)', ) type = django_filters.ModelMultipleChoiceFilter( field_name='type__slug', - queryset=CircuitType.objects.unrestricted(), + queryset=CircuitType.objects.all(), to_field_name='slug', label='Circuit type (slug)', ) @@ -103,23 +103,23 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldFilterSet, TenancyFilterSet, Cr ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='terminations__site', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='terminations__site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='terminations__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='terminations__site__region', lookup_expr='in', to_field_name='slug', @@ -150,16 +150,16 @@ class CircuitTerminationFilterSet(BaseFilterSet): label='Search', ) circuit_id = django_filters.ModelMultipleChoiceFilter( - queryset=Circuit.objects.unrestricted(), + queryset=Circuit.objects.all(), label='Circuit', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) diff --git a/netbox/circuits/models.py b/netbox/circuits/models.py index 9ec90d110..cdec41d1f 100644 --- a/netbox/circuits/models.py +++ b/netbox/circuits/models.py @@ -238,7 +238,7 @@ class Circuit(ChangeLoggedModel, CustomFieldModel): return self.STATUS_CLASS_MAP.get(self.status) def _get_termination(self, side): - for ct in self.terminations.unrestricted(): + for ct in self.terminations.all(): if ct.term_side == side: return ct return None @@ -336,7 +336,7 @@ class CircuitTermination(CableTermination): def get_peer_termination(self): peer_side = 'Z' if self.term_side == 'A' else 'A' try: - return CircuitTermination.objects.unrestricted().prefetch_related('site').get( + return CircuitTermination.objects.prefetch_related('site').get( circuit=self.circuit, term_side=peer_side ) diff --git a/netbox/circuits/signals.py b/netbox/circuits/signals.py index 071b7af20..86db21400 100644 --- a/netbox/circuits/signals.py +++ b/netbox/circuits/signals.py @@ -10,7 +10,7 @@ def update_circuit(instance, **kwargs): """ When a CircuitTermination has been modified, update the last_updated time of its parent Circuit. """ - circuits = Circuit.objects.unrestricted().filter(pk=instance.circuit_id) + circuits = Circuit.objects.filter(pk=instance.circuit_id) time = timezone.now() for circuit in circuits: circuit.last_updated = time diff --git a/netbox/circuits/tests/test_api.py b/netbox/circuits/tests/test_api.py index 05a0febc7..56cdc7874 100644 --- a/netbox/circuits/tests/test_api.py +++ b/netbox/circuits/tests/test_api.py @@ -51,7 +51,7 @@ class ProviderTest(APIViewTestCases.APIViewTestCase): """ Test retrieval of Graphs assigned to Providers. """ - provider = self.model.objects.unrestricted().first() + provider = self.model.objects.first() ct = ContentType.objects.get(app_label='circuits', model='provider') graphs = ( Graph(type=ct, name='Graph 1', source='http://example.com/graphs.py?provider={{ obj.slug }}&foo=1'), diff --git a/netbox/circuits/tests/test_filters.py b/netbox/circuits/tests/test_filters.py index 55025c043..9756c320b 100644 --- a/netbox/circuits/tests/test_filters.py +++ b/netbox/circuits/tests/test_filters.py @@ -8,7 +8,7 @@ from tenancy.models import Tenant, TenantGroup class ProviderTestCase(TestCase): - queryset = Provider.objects.unrestricted() + queryset = Provider.objects.all() filterset = ProviderFilterSet @classmethod @@ -75,14 +75,14 @@ class ProviderTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} @@ -90,7 +90,7 @@ class ProviderTestCase(TestCase): class CircuitTypeTestCase(TestCase): - queryset = CircuitType.objects.unrestricted() + queryset = CircuitType.objects.all() filterset = CircuitTypeFilterSet @classmethod @@ -116,7 +116,7 @@ class CircuitTypeTestCase(TestCase): class CircuitTestCase(TestCase): - queryset = Circuit.objects.unrestricted() + queryset = Circuit.objects.all() filterset = CircuitFilterSet @classmethod @@ -199,14 +199,14 @@ class CircuitTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_provider(self): - provider = Provider.objects.unrestricted().first() + provider = Provider.objects.first() params = {'provider_id': [provider.pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) params = {'provider': [provider.slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) def test_type(self): - circuit_type = CircuitType.objects.unrestricted().first() + circuit_type = CircuitType.objects.first() params = {'type_id': [circuit_type.pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) params = {'type': [circuit_type.slug]} @@ -217,28 +217,28 @@ class CircuitTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -246,7 +246,7 @@ class CircuitTestCase(TestCase): class CircuitTerminationTestCase(TestCase): - queryset = CircuitTermination.objects.unrestricted() + queryset = CircuitTermination.objects.all() filterset = CircuitTerminationFilterSet @classmethod @@ -303,12 +303,12 @@ class CircuitTerminationTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_circuit_id(self): - circuits = Circuit.objects.unrestricted()[:2] + circuits = Circuit.objects.all()[:2] params = {'circuit_id': [circuits[0].pk, circuits[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'site': [sites[0].slug, sites[1].slug]} diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index df90a3671..4d02ef011 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -120,8 +120,7 @@ class CircuitTypeBulkDeleteView(BulkDeleteView): class CircuitListView(ObjectListView): queryset = Circuit.objects.prefetch_related( - Prefetch('terminations', CircuitTermination.objects.unrestricted()), - 'provider', 'type', 'tenant' + 'provider', 'type', 'tenant', 'terminations' ).annotate_sites() filterset = filters.CircuitFilterSet filterset_form = forms.CircuitFilterForm @@ -175,8 +174,7 @@ class CircuitBulkImportView(BulkImportView): class CircuitBulkEditView(BulkEditView): queryset = Circuit.objects.prefetch_related( - Prefetch('terminations', CircuitTermination.objects.unrestricted()), - 'provider', 'type', 'tenant' + 'provider', 'type', 'tenant', 'terminations' ) filterset = filters.CircuitFilterSet table = tables.CircuitTable @@ -185,8 +183,7 @@ class CircuitBulkEditView(BulkEditView): class CircuitBulkDeleteView(BulkDeleteView): queryset = Circuit.objects.prefetch_related( - Prefetch('terminations', CircuitTermination.objects.unrestricted()), - 'provider', 'type', 'tenant' + 'provider', 'type', 'tenant', 'terminations' ) filterset = filters.CircuitFilterSet table = tables.CircuitTable diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index 112569c07..038907b97 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -682,7 +682,7 @@ class ConnectedDeviceViewSet(ViewSet): # Determine local interface from peer interface's connection peer_interface = get_object_or_404( - Interface.objects.unrestricted(), + Interface.objects.all(), device__name=peer_device_name, name=peer_interface_name ) diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index fa0af7228..4168a19ff 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -62,12 +62,12 @@ __all__ = ( class RegionFilterSet(BaseFilterSet, NameSlugSearchFilterSet): parent_id = django_filters.ModelMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), label='Parent region (ID)', ) parent = django_filters.ModelMultipleChoiceFilter( field_name='parent__slug', - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), to_field_name='slug', label='Parent region (slug)', ) @@ -87,13 +87,13 @@ class SiteFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat null_value=None ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='region', lookup_expr='in', to_field_name='slug', @@ -131,35 +131,35 @@ class SiteFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat class RackGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet): region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) parent_id = django_filters.ModelMultipleChoiceFilter( - queryset=RackGroup.objects.unrestricted(), + queryset=RackGroup.objects.all(), label='Rack group (ID)', ) parent = django_filters.ModelMultipleChoiceFilter( field_name='parent__slug', - queryset=RackGroup.objects.unrestricted(), + queryset=RackGroup.objects.all(), to_field_name='slug', label='Rack group (slug)', ) @@ -182,36 +182,36 @@ class RackFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = TreeNodeMultipleChoiceFilter( - queryset=RackGroup.objects.unrestricted(), + queryset=RackGroup.objects.all(), field_name='group', lookup_expr='in', label='Rack group (ID)', ) group = TreeNodeMultipleChoiceFilter( - queryset=RackGroup.objects.unrestricted(), + queryset=RackGroup.objects.all(), field_name='group', lookup_expr='in', to_field_name='slug', @@ -222,12 +222,12 @@ class RackFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat null_value=None ) role_id = django_filters.ModelMultipleChoiceFilter( - queryset=RackRole.objects.unrestricted(), + queryset=RackRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='role__slug', - queryset=RackRole.objects.unrestricted(), + queryset=RackRole.objects.all(), to_field_name='slug', label='Role (slug)', ) @@ -261,28 +261,28 @@ class RackReservationFilterSet(BaseFilterSet, TenancyFilterSet): label='Search', ) rack_id = django_filters.ModelMultipleChoiceFilter( - queryset=Rack.objects.unrestricted(), + queryset=Rack.objects.all(), label='Rack (ID)', ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='rack__site', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='rack__site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = TreeNodeMultipleChoiceFilter( - queryset=RackGroup.objects.unrestricted(), + queryset=RackGroup.objects.all(), field_name='rack__group', lookup_expr='in', label='Rack group (ID)', ) group = TreeNodeMultipleChoiceFilter( - queryset=RackGroup.objects.unrestricted(), + queryset=RackGroup.objects.all(), field_name='rack__group', lookup_expr='in', to_field_name='slug', @@ -328,12 +328,12 @@ class DeviceTypeFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFil label='Search', ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( - queryset=Manufacturer.objects.unrestricted(), + queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_name='manufacturer__slug', - queryset=Manufacturer.objects.unrestricted(), + queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', ) @@ -410,7 +410,7 @@ class DeviceTypeFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFil class DeviceTypeComponentFilterSet(NameSlugSearchFilterSet): devicetype_id = django_filters.ModelMultipleChoiceFilter( - queryset=DeviceType.objects.unrestricted(), + queryset=DeviceType.objects.all(), field_name='device_type_id', label='Device type (ID)', ) @@ -482,12 +482,12 @@ class DeviceRoleFilterSet(BaseFilterSet, NameSlugSearchFilterSet): class PlatformFilterSet(BaseFilterSet, NameSlugSearchFilterSet): manufacturer_id = django_filters.ModelMultipleChoiceFilter( field_name='manufacturer', - queryset=Manufacturer.objects.unrestricted(), + queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_name='manufacturer__slug', - queryset=Manufacturer.objects.unrestricted(), + queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', ) @@ -510,81 +510,81 @@ class DeviceFilterSet( ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( field_name='device_type__manufacturer', - queryset=Manufacturer.objects.unrestricted(), + queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_name='device_type__manufacturer__slug', - queryset=Manufacturer.objects.unrestricted(), + queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', ) device_type_id = django_filters.ModelMultipleChoiceFilter( - queryset=DeviceType.objects.unrestricted(), + queryset=DeviceType.objects.all(), label='Device type (ID)', ) role_id = django_filters.ModelMultipleChoiceFilter( field_name='device_role_id', - queryset=DeviceRole.objects.unrestricted(), + queryset=DeviceRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='device_role__slug', - queryset=DeviceRole.objects.unrestricted(), + queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) platform_id = django_filters.ModelMultipleChoiceFilter( - queryset=Platform.objects.unrestricted(), + queryset=Platform.objects.all(), label='Platform (ID)', ) platform = django_filters.ModelMultipleChoiceFilter( field_name='platform__slug', - queryset=Platform.objects.unrestricted(), + queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) rack_group_id = TreeNodeMultipleChoiceFilter( - queryset=RackGroup.objects.unrestricted(), + queryset=RackGroup.objects.all(), field_name='rack__group', lookup_expr='in', label='Rack group (ID)', ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name='rack', - queryset=Rack.objects.unrestricted(), + queryset=Rack.objects.all(), label='Rack (ID)', ) cluster_id = django_filters.ModelMultipleChoiceFilter( - queryset=Cluster.objects.unrestricted(), + queryset=Cluster.objects.all(), label='VM cluster (ID)', ) model = django_filters.ModelMultipleChoiceFilter( field_name='device_type__slug', - queryset=DeviceType.objects.unrestricted(), + queryset=DeviceType.objects.all(), to_field_name='slug', label='Device model (slug)', ) @@ -609,7 +609,7 @@ class DeviceFilterSet( ) virtual_chassis_id = django_filters.ModelMultipleChoiceFilter( field_name='virtual_chassis', - queryset=VirtualChassis.objects.unrestricted(), + queryset=VirtualChassis.objects.all(), label='Virtual chassis (ID)', ) virtual_chassis_member = django_filters.BooleanFilter( @@ -707,13 +707,13 @@ class DeviceComponentFilterSet(django_filters.FilterSet): label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='device__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='device__site__region', lookup_expr='in', to_field_name='slug', @@ -721,22 +721,22 @@ class DeviceComponentFilterSet(django_filters.FilterSet): ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='device__site', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='device__site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) device_id = django_filters.ModelMultipleChoiceFilter( - queryset=Device.objects.unrestricted(), + queryset=Device.objects.all(), label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( field_name='device__name', - queryset=Device.objects.unrestricted(), + queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) @@ -844,7 +844,7 @@ class InterfaceFilterSet(BaseFilterSet, DeviceComponentFilterSet): ) lag_id = django_filters.ModelMultipleChoiceFilter( field_name='lag', - queryset=Interface.objects.unrestricted(), + queryset=Interface.objects.all(), label='LAG interface (ID)', ) mac_address = MultiValueMACAddressFilter() @@ -951,13 +951,13 @@ class InventoryItemFilterSet(BaseFilterSet, DeviceComponentFilterSet): label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='device__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='device__site__region', lookup_expr='in', to_field_name='slug', @@ -965,35 +965,35 @@ class InventoryItemFilterSet(BaseFilterSet, DeviceComponentFilterSet): ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='device__site', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='device__site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) device_id = django_filters.ModelChoiceFilter( - queryset=Device.objects.unrestricted(), + queryset=Device.objects.all(), label='Device (ID)', ) device = django_filters.ModelChoiceFilter( - queryset=Device.objects.unrestricted(), + queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) parent_id = django_filters.ModelMultipleChoiceFilter( - queryset=InventoryItem.objects.unrestricted(), + queryset=InventoryItem.objects.all(), label='Parent inventory item (ID)', ) manufacturer_id = django_filters.ModelMultipleChoiceFilter( - queryset=Manufacturer.objects.unrestricted(), + queryset=Manufacturer.objects.all(), label='Manufacturer (ID)', ) manufacturer = django_filters.ModelMultipleChoiceFilter( field_name='manufacturer__slug', - queryset=Manufacturer.objects.unrestricted(), + queryset=Manufacturer.objects.all(), to_field_name='slug', label='Manufacturer (slug)', ) @@ -1024,13 +1024,13 @@ class VirtualChassisFilterSet(BaseFilterSet): label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='master__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='master__site__region', lookup_expr='in', to_field_name='slug', @@ -1038,23 +1038,23 @@ class VirtualChassisFilterSet(BaseFilterSet): ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='master__site', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='master__site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) tenant_id = django_filters.ModelMultipleChoiceFilter( field_name='master__tenant', - queryset=Tenant.objects.unrestricted(), + queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( field_name='master__tenant__slug', - queryset=Tenant.objects.unrestricted(), + queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) @@ -1240,30 +1240,30 @@ class PowerPanelFilterSet(BaseFilterSet): label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) rack_group_id = TreeNodeMultipleChoiceFilter( - queryset=RackGroup.objects.unrestricted(), + queryset=RackGroup.objects.all(), field_name='rack_group', lookup_expr='in', label='Rack group (ID)', @@ -1289,13 +1289,13 @@ class PowerFeedFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilt label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='power_panel__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='power_panel__site__region', lookup_expr='in', to_field_name='slug', @@ -1303,22 +1303,22 @@ class PowerFeedFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilt ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='power_panel__site', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='power_panel__site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site name (slug)', ) power_panel_id = django_filters.ModelMultipleChoiceFilter( - queryset=PowerPanel.objects.unrestricted(), + queryset=PowerPanel.objects.all(), label='Power panel (ID)', ) rack_id = django_filters.ModelMultipleChoiceFilter( field_name='rack', - queryset=Rack.objects.unrestricted(), + queryset=Rack.objects.all(), label='Rack (ID)', ) tag = TagFilter() diff --git a/netbox/dcim/models/__init__.py b/netbox/dcim/models/__init__.py index 7fb6d3a4b..3deea8140 100644 --- a/netbox/dcim/models/__init__.py +++ b/netbox/dcim/models/__init__.py @@ -581,7 +581,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel): if self.pk: # Validate that Rack is tall enough to house the installed Devices - top_device = Device.objects.unrestricted().filter( + top_device = Device.objects.filter( rack=self ).exclude( position__isnull=True @@ -606,13 +606,13 @@ class Rack(ChangeLoggedModel, CustomFieldModel): # Record the original site assignment for this rack. _site_id = None if self.pk: - _site_id = Rack.objects.unrestricted().get(pk=self.pk).site_id + _site_id = Rack.objects.get(pk=self.pk).site_id super().save(*args, **kwargs) # Update racked devices if the assigned Site has been changed. if _site_id is not None and self.site_id != _site_id: - devices = Device.objects.unrestricted().filter(rack=self) + devices = Device.objects.filter(rack=self) for device in devices: device.site = self.site device.save() @@ -674,7 +674,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel): # Add devices to rack units list if self.pk: - queryset = Device.objects.unrestricted().prefetch_related( + queryset = Device.objects.prefetch_related( 'device_type', 'device_type__manufacturer', 'device_role' @@ -712,7 +712,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel): :param exclude: List of devices IDs to exclude (useful when moving a device within a rack) """ # Gather all devices which consume U space within the rack - devices = self.devices.unrestricted().prefetch_related('device_type').filter(position__gte=1) + devices = self.devices.prefetch_related('device_type').filter(position__gte=1) if exclude is not None: devices = devices.exclude(pk__in=exclude) @@ -742,7 +742,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel): Return a dictionary mapping all reserved units within the rack to their reservation. """ reserved_units = {} - for r in self.reservations.unrestricted(): + for r in self.reservations.all(): for u in r.units: reserved_units[u] = r return reserved_units @@ -796,7 +796,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel): """ Determine the utilization rate of power in the rack and return it as a percentage. """ - power_stats = PowerFeed.objects.unrestricted().filter( + power_stats = PowerFeed.objects.filter( rack=self ).annotate( allocated_draw_total=Sum('connected_endpoint__poweroutlets__connected_endpoint__allocated_draw'), @@ -1130,7 +1130,7 @@ class DeviceType(ChangeLoggedModel, CustomFieldModel): # room to expand within their racks. This validation will impose a very high performance penalty when there are # many instances to check, but increasing the u_height of a DeviceType should be a very rare occurrence. if self.pk and self.u_height > self._original_u_height: - for d in Device.objects.unrestricted().filter(device_type=self, position__isnull=False): + for d in Device.objects.filter(device_type=self, position__isnull=False): face_required = None if self.is_full_depth else d.face u_available = d.rack.get_available_units( u_height=self.u_height, @@ -1145,7 +1145,7 @@ class DeviceType(ChangeLoggedModel, CustomFieldModel): # If modifying the height of an existing DeviceType to 0U, check for any instances assigned to a rack position. elif self.pk and self._original_u_height > 0 and self.u_height == 0: - racked_instance_count = Device.objects.unrestricted().filter( + racked_instance_count = Device.objects.filter( device_type=self, position__isnull=False ).count() @@ -1501,7 +1501,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): # because Django does not consider two NULL fields to be equal, and thus will not trigger a violation # of the uniqueness constraint without manual intervention. if self.name and self.tenant is None: - if Device.objects.unrestricted().exclude(pk=self.pk).filter( + if Device.objects.exclude(pk=self.pk).filter( name=self.name, site=self.site, tenant__isnull=True @@ -1635,32 +1635,32 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): # If this is a new Device, instantiate all of the related components per the DeviceType definition if is_new: ConsolePort.objects.bulk_create( - [x.instantiate(self) for x in self.device_type.consoleporttemplates.unrestricted()] + [x.instantiate(self) for x in self.device_type.consoleporttemplates.all()] ) ConsoleServerPort.objects.bulk_create( - [x.instantiate(self) for x in self.device_type.consoleserverporttemplates.unrestricted()] + [x.instantiate(self) for x in self.device_type.consoleserverporttemplates.all()] ) PowerPort.objects.bulk_create( - [x.instantiate(self) for x in self.device_type.powerporttemplates.unrestricted()] + [x.instantiate(self) for x in self.device_type.powerporttemplates.all()] ) PowerOutlet.objects.bulk_create( - [x.instantiate(self) for x in self.device_type.poweroutlettemplates.unrestricted()] + [x.instantiate(self) for x in self.device_type.poweroutlettemplates.all()] ) Interface.objects.bulk_create( - [x.instantiate(self) for x in self.device_type.interfacetemplates.unrestricted()] + [x.instantiate(self) for x in self.device_type.interfacetemplates.all()] ) RearPort.objects.bulk_create( - [x.instantiate(self) for x in self.device_type.rearporttemplates.unrestricted()] + [x.instantiate(self) for x in self.device_type.rearporttemplates.all()] ) FrontPort.objects.bulk_create( - [x.instantiate(self) for x in self.device_type.frontporttemplates.unrestricted()] + [x.instantiate(self) for x in self.device_type.frontporttemplates.all()] ) DeviceBay.objects.bulk_create( - [x.instantiate(self) for x in self.device_type.devicebaytemplates.unrestricted()] + [x.instantiate(self) for x in self.device_type.devicebaytemplates.all()] ) # Update Site and Rack assignment for any child Devices - devices = Device.objects.unrestricted().filter(parent_bay__device=self) + devices = Device.objects.filter(parent_bay__device=self) for device in devices: device.site = self.site device.rack = self.rack @@ -1730,7 +1730,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): filter = Q(device=self) if self.virtual_chassis and self.virtual_chassis.master == self: filter |= Q(device__virtual_chassis=self.virtual_chassis, mgmt_only=False) - return Interface.objects.unrestricted().filter(filter) + return Interface.objects.filter(filter) def get_cables(self, pk_list=False): """ @@ -1751,7 +1751,7 @@ class Device(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): """ Return the set of child Devices installed in DeviceBays within this Device. """ - return Device.objects.unrestricted().filter(parent_bay__device=self.pk) + return Device.objects.filter(parent_bay__device=self.pk) def get_status_class(self): return self.STATUS_CLASS_MAP.get(self.status) @@ -1808,7 +1808,7 @@ class VirtualChassis(ChangeLoggedModel): def delete(self, *args, **kwargs): # Check for LAG interfaces split across member chassis - interfaces = Interface.objects.unrestricted().filter( + interfaces = Interface.objects.filter( device__in=self.members.all(), lag__isnull=False ).exclude( @@ -2183,7 +2183,7 @@ class Cable(ChangeLoggedModel): if not hasattr(self, 'termination_a_type'): raise ValidationError('Termination A type has not been specified') try: - self.termination_a_type.model_class().objects.unrestricted().get(pk=self.termination_a_id) + self.termination_a_type.model_class().objects.get(pk=self.termination_a_id) except ObjectDoesNotExist: raise ValidationError({ 'termination_a': 'Invalid ID for type {}'.format(self.termination_a_type) @@ -2193,7 +2193,7 @@ class Cable(ChangeLoggedModel): if not hasattr(self, 'termination_b_type'): raise ValidationError('Termination B type has not been specified') try: - self.termination_b_type.model_class().objects.unrestricted().get(pk=self.termination_b_id) + self.termination_b_type.model_class().objects.get(pk=self.termination_b_id) except ObjectDoesNotExist: raise ValidationError({ 'termination_b': 'Invalid ID for type {}'.format(self.termination_b_type) diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 264102fbe..b6788eabe 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -38,11 +38,11 @@ class Mixins: """ Test tracing a device component's attached cable. """ - obj = self.model.objects.unrestricted().first() + obj = self.model.objects.first() peer_device = Device.objects.create( - site=Site.objects.unrestricted().first(), - device_type=DeviceType.objects.unrestricted().first(), - device_role=DeviceRole.objects.unrestricted().first(), + site=Site.objects.first(), + device_type=DeviceType.objects.first(), + device_role=DeviceRole.objects.first(), name='Peer Device' ) if self.peer_termination_type is None: @@ -146,7 +146,7 @@ class SiteTest(APIViewTestCases.APIViewTestCase): Graph.objects.bulk_create(graphs) self.add_permissions('dcim.view_site') - url = reverse('dcim-api:site-graphs', kwargs={'pk': Site.objects.unrestricted().unrestricted().first().pk}) + url = reverse('dcim-api:site-graphs', kwargs={'pk': Site.objects.first().pk}) response = self.client.get(url, **self.header) self.assertEqual(len(response.data), 3) @@ -285,7 +285,7 @@ class RackTest(APIViewTestCases.APIViewTestCase): """ GET a single rack elevation. """ - rack = Rack.objects.unrestricted().first() + rack = Rack.objects.first() self.add_permissions('dcim.view_rack') url = reverse('dcim-api:rack-elevation', kwargs={'pk': rack.pk}) @@ -305,7 +305,7 @@ class RackTest(APIViewTestCases.APIViewTestCase): """ GET a single rack elevation in SVG format. """ - rack = Rack.objects.unrestricted().first() + rack = Rack.objects.first() self.add_permissions('dcim.view_rack') url = '{}?render=svg'.format(reverse('dcim-api:rack-elevation', kwargs={'pk': rack.pk})) @@ -916,7 +916,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): Graph.objects.bulk_create(graphs) self.add_permissions('dcim.view_device') - url = reverse('dcim-api:device-graphs', kwargs={'pk': Device.objects.unrestricted().first().pk}) + url = reverse('dcim-api:device-graphs', kwargs={'pk': Device.objects.first().pk}) response = self.client.get(url, **self.header) self.assertEqual(len(response.data), 3) @@ -946,7 +946,7 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): """ Check that creating a device with a duplicate name within a site fails. """ - device = Device.objects.unrestricted().first() + device = Device.objects.first() data = { 'device_type': device.device_type.pk, 'device_role': device.device_role.pk, @@ -1173,7 +1173,7 @@ class InterfaceTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase Graph.objects.bulk_create(graphs) self.add_permissions('dcim.view_interface') - url = reverse('dcim-api:interface-graphs', kwargs={'pk': Interface.objects.unrestricted().first().pk}) + url = reverse('dcim-api:interface-graphs', kwargs={'pk': Interface.objects.first().pk}) response = self.client.get(url, **self.header) self.assertEqual(len(response.data), 3) @@ -1483,11 +1483,11 @@ class ConnectionTest(APITestCase): response = self.client.post(url, data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_201_CREATED) - self.assertEqual(Cable.objects.unrestricted().count(), 1) + self.assertEqual(Cable.objects.count(), 1) - cable = Cable.objects.unrestricted().get(pk=response.data['id']) - consoleport1 = ConsolePort.objects.unrestricted().get(pk=consoleport1.pk) - consoleserverport1 = ConsoleServerPort.objects.unrestricted().get(pk=consoleserverport1.pk) + cable = Cable.objects.get(pk=response.data['id']) + consoleport1 = ConsolePort.objects.get(pk=consoleport1.pk) + consoleserverport1 = ConsoleServerPort.objects.get(pk=consoleserverport1.pk) self.assertEqual(cable.termination_a, consoleport1) self.assertEqual(cable.termination_b, consoleserverport1) @@ -1548,12 +1548,12 @@ class ConnectionTest(APITestCase): response = self.client.post(url, data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_201_CREATED) - cable = Cable.objects.unrestricted().get(pk=response.data['id']) + cable = Cable.objects.get(pk=response.data['id']) self.assertEqual(cable.termination_a.cable, cable) self.assertEqual(cable.termination_b.cable, cable) - consoleport1 = ConsolePort.objects.unrestricted().get(pk=consoleport1.pk) - consoleserverport1 = ConsoleServerPort.objects.unrestricted().get(pk=consoleserverport1.pk) + consoleport1 = ConsolePort.objects.get(pk=consoleport1.pk) + consoleserverport1 = ConsoleServerPort.objects.get(pk=consoleserverport1.pk) self.assertEqual(consoleport1.connected_endpoint, consoleserverport1) self.assertEqual(consoleserverport1.connected_endpoint, consoleport1) @@ -1578,11 +1578,11 @@ class ConnectionTest(APITestCase): response = self.client.post(url, data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_201_CREATED) - self.assertEqual(Cable.objects.unrestricted().count(), 1) + self.assertEqual(Cable.objects.count(), 1) - cable = Cable.objects.unrestricted().get(pk=response.data['id']) - powerport1 = PowerPort.objects.unrestricted().get(pk=powerport1.pk) - poweroutlet1 = PowerOutlet.objects.unrestricted().get(pk=poweroutlet1.pk) + cable = Cable.objects.get(pk=response.data['id']) + powerport1 = PowerPort.objects.get(pk=powerport1.pk) + poweroutlet1 = PowerOutlet.objects.get(pk=poweroutlet1.pk) self.assertEqual(cable.termination_a, powerport1) self.assertEqual(cable.termination_b, poweroutlet1) @@ -1614,11 +1614,11 @@ class ConnectionTest(APITestCase): response = self.client.post(url, data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_201_CREATED) - self.assertEqual(Cable.objects.unrestricted().count(), 1) + self.assertEqual(Cable.objects.count(), 1) - cable = Cable.objects.unrestricted().get(pk=response.data['id']) - interface1 = Interface.objects.unrestricted().get(pk=interface1.pk) - interface2 = Interface.objects.unrestricted().get(pk=interface2.pk) + cable = Cable.objects.get(pk=response.data['id']) + interface1 = Interface.objects.get(pk=interface1.pk) + interface2 = Interface.objects.get(pk=interface2.pk) self.assertEqual(cable.termination_a, interface1) self.assertEqual(cable.termination_b, interface2) @@ -1679,12 +1679,12 @@ class ConnectionTest(APITestCase): response = self.client.post(url, data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_201_CREATED) - cable = Cable.objects.unrestricted().get(pk=response.data['id']) + cable = Cable.objects.get(pk=response.data['id']) self.assertEqual(cable.termination_a.cable, cable) self.assertEqual(cable.termination_b.cable, cable) - interface1 = Interface.objects.unrestricted().get(pk=interface1.pk) - interface2 = Interface.objects.unrestricted().get(pk=interface2.pk) + interface1 = Interface.objects.get(pk=interface1.pk) + interface2 = Interface.objects.get(pk=interface2.pk) self.assertEqual(interface1.connected_endpoint, interface2) self.assertEqual(interface2.connected_endpoint, interface1) @@ -1718,11 +1718,11 @@ class ConnectionTest(APITestCase): response = self.client.post(url, data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_201_CREATED) - self.assertEqual(Cable.objects.unrestricted().count(), 1) + self.assertEqual(Cable.objects.count(), 1) - cable = Cable.objects.unrestricted().get(pk=response.data['id']) - interface1 = Interface.objects.unrestricted().get(pk=interface1.pk) - circuittermination1 = CircuitTermination.objects.unrestricted().get(pk=circuittermination1.pk) + cable = Cable.objects.get(pk=response.data['id']) + interface1 = Interface.objects.get(pk=interface1.pk) + circuittermination1 = CircuitTermination.objects.get(pk=circuittermination1.pk) self.assertEqual(cable.termination_a, interface1) self.assertEqual(cable.termination_b, circuittermination1) @@ -1792,12 +1792,12 @@ class ConnectionTest(APITestCase): response = self.client.post(url, data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_201_CREATED) - cable = Cable.objects.unrestricted().get(pk=response.data['id']) + cable = Cable.objects.get(pk=response.data['id']) self.assertEqual(cable.termination_a.cable, cable) self.assertEqual(cable.termination_b.cable, cable) - interface1 = Interface.objects.unrestricted().get(pk=interface1.pk) - circuittermination1 = CircuitTermination.objects.unrestricted().get(pk=circuittermination1.pk) + interface1 = Interface.objects.get(pk=interface1.pk) + circuittermination1 = CircuitTermination.objects.get(pk=circuittermination1.pk) self.assertEqual(interface1.connected_endpoint, circuittermination1) self.assertEqual(circuittermination1.connected_endpoint, interface1) @@ -1888,12 +1888,12 @@ class VirtualChassisTest(APIViewTestCases.APIViewTestCase): VirtualChassis(name='Virtual Chassis 3', master=devices[6], domain='domain-3'), ) VirtualChassis.objects.bulk_create(virtual_chassis) - Device.objects.unrestricted().filter(pk=devices[1].pk).update(virtual_chassis=virtual_chassis[0], vc_position=2) - Device.objects.unrestricted().filter(pk=devices[2].pk).update(virtual_chassis=virtual_chassis[0], vc_position=3) - Device.objects.unrestricted().filter(pk=devices[4].pk).update(virtual_chassis=virtual_chassis[1], vc_position=2) - Device.objects.unrestricted().filter(pk=devices[5].pk).update(virtual_chassis=virtual_chassis[1], vc_position=3) - Device.objects.unrestricted().filter(pk=devices[7].pk).update(virtual_chassis=virtual_chassis[2], vc_position=2) - Device.objects.unrestricted().filter(pk=devices[8].pk).update(virtual_chassis=virtual_chassis[2], vc_position=3) + Device.objects.filter(pk=devices[1].pk).update(virtual_chassis=virtual_chassis[0], vc_position=2) + Device.objects.filter(pk=devices[2].pk).update(virtual_chassis=virtual_chassis[0], vc_position=3) + Device.objects.filter(pk=devices[4].pk).update(virtual_chassis=virtual_chassis[1], vc_position=2) + Device.objects.filter(pk=devices[5].pk).update(virtual_chassis=virtual_chassis[1], vc_position=3) + Device.objects.filter(pk=devices[7].pk).update(virtual_chassis=virtual_chassis[2], vc_position=2) + Device.objects.filter(pk=devices[8].pk).update(virtual_chassis=virtual_chassis[2], vc_position=3) cls.update_data = { 'name': 'Virtual Chassis X', diff --git a/netbox/dcim/tests/test_filters.py b/netbox/dcim/tests/test_filters.py index 2418273ba..d4504d586 100644 --- a/netbox/dcim/tests/test_filters.py +++ b/netbox/dcim/tests/test_filters.py @@ -16,7 +16,7 @@ from virtualization.models import Cluster, ClusterType class RegionTestCase(TestCase): - queryset = Region.objects.unrestricted() + queryset = Region.objects.all() filterset = RegionFilterSet @classmethod @@ -66,7 +66,7 @@ class RegionTestCase(TestCase): class SiteTestCase(TestCase): - queryset = Site.objects.unrestricted() + queryset = Site.objects.all() filterset = SiteFilterSet @classmethod @@ -147,21 +147,21 @@ class SiteTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -169,7 +169,7 @@ class SiteTestCase(TestCase): class RackGroupTestCase(TestCase): - queryset = RackGroup.objects.unrestricted() + queryset = RackGroup.objects.all() filterset = RackGroupFilterSet @classmethod @@ -223,14 +223,14 @@ class RackGroupTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'site': [sites[0].slug, sites[1].slug]} @@ -245,7 +245,7 @@ class RackGroupTestCase(TestCase): class RackRoleTestCase(TestCase): - queryset = RackRole.objects.unrestricted() + queryset = RackRole.objects.all() filterset = RackRoleFilterSet @classmethod @@ -276,7 +276,7 @@ class RackRoleTestCase(TestCase): class RackTestCase(TestCase): - queryset = Rack.objects.unrestricted() + queryset = Rack.objects.all() filterset = RackFilterSet @classmethod @@ -384,21 +384,21 @@ class RackTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_group(self): - groups = RackGroup.objects.unrestricted()[:2] + groups = RackGroup.objects.all()[:2] params = {'group_id': [groups[0].pk, groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'group': [groups[0].slug, groups[1].slug]} @@ -409,7 +409,7 @@ class RackTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_role(self): - roles = RackRole.objects.unrestricted()[:2] + roles = RackRole.objects.all()[:2] params = {'role_id': [roles[0].pk, roles[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'role': [roles[0].slug, roles[1].slug]} @@ -422,14 +422,14 @@ class RackTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -437,7 +437,7 @@ class RackTestCase(TestCase): class RackReservationTestCase(TestCase): - queryset = RackReservation.objects.unrestricted() + queryset = RackReservation.objects.all() filterset = RackReservationFilterSet @classmethod @@ -499,14 +499,14 @@ class RackReservationTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_group(self): - groups = RackGroup.objects.unrestricted()[:2] + groups = RackGroup.objects.all()[:2] params = {'group_id': [groups[0].pk, groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'group': [groups[0].slug, groups[1].slug]} @@ -521,14 +521,14 @@ class RackReservationTestCase(TestCase): # self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -536,7 +536,7 @@ class RackReservationTestCase(TestCase): class ManufacturerTestCase(TestCase): - queryset = Manufacturer.objects.unrestricted() + queryset = Manufacturer.objects.all() filterset = ManufacturerFilterSet @classmethod @@ -567,7 +567,7 @@ class ManufacturerTestCase(TestCase): class DeviceTypeTestCase(TestCase): - queryset = DeviceType.objects.unrestricted() + queryset = DeviceType.objects.all() filterset = DeviceTypeFilterSet @classmethod @@ -653,7 +653,7 @@ class DeviceTypeTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) def test_manufacturer(self): - manufacturers = Manufacturer.objects.unrestricted()[:2] + manufacturers = Manufacturer.objects.all()[:2] params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} @@ -703,7 +703,7 @@ class DeviceTypeTestCase(TestCase): class ConsolePortTemplateTestCase(TestCase): - queryset = ConsolePortTemplate.objects.unrestricted() + queryset = ConsolePortTemplate.objects.all() filterset = ConsolePortTemplateFilterSet @classmethod @@ -733,13 +733,13 @@ class ConsolePortTemplateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype_id(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) class ConsoleServerPortTemplateTestCase(TestCase): - queryset = ConsoleServerPortTemplate.objects.unrestricted() + queryset = ConsoleServerPortTemplate.objects.all() filterset = ConsoleServerPortTemplateFilterSet @classmethod @@ -769,13 +769,13 @@ class ConsoleServerPortTemplateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype_id(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) class PowerPortTemplateTestCase(TestCase): - queryset = PowerPortTemplate.objects.unrestricted() + queryset = PowerPortTemplate.objects.all() filterset = PowerPortTemplateFilterSet @classmethod @@ -805,7 +805,7 @@ class PowerPortTemplateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype_id(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -819,7 +819,7 @@ class PowerPortTemplateTestCase(TestCase): class PowerOutletTemplateTestCase(TestCase): - queryset = PowerOutletTemplate.objects.unrestricted() + queryset = PowerOutletTemplate.objects.all() filterset = PowerOutletTemplateFilterSet @classmethod @@ -849,7 +849,7 @@ class PowerOutletTemplateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype_id(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -860,7 +860,7 @@ class PowerOutletTemplateTestCase(TestCase): class InterfaceTemplateTestCase(TestCase): - queryset = InterfaceTemplate.objects.unrestricted() + queryset = InterfaceTemplate.objects.all() filterset = InterfaceTemplateFilterSet @classmethod @@ -890,7 +890,7 @@ class InterfaceTemplateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype_id(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -907,7 +907,7 @@ class InterfaceTemplateTestCase(TestCase): class FrontPortTemplateTestCase(TestCase): - queryset = FrontPortTemplate.objects.unrestricted() + queryset = FrontPortTemplate.objects.all() filterset = FrontPortTemplateFilterSet @classmethod @@ -944,7 +944,7 @@ class FrontPortTemplateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype_id(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -955,7 +955,7 @@ class FrontPortTemplateTestCase(TestCase): class RearPortTemplateTestCase(TestCase): - queryset = RearPortTemplate.objects.unrestricted() + queryset = RearPortTemplate.objects.all() filterset = RearPortTemplateFilterSet @classmethod @@ -985,7 +985,7 @@ class RearPortTemplateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype_id(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -1000,7 +1000,7 @@ class RearPortTemplateTestCase(TestCase): class DeviceBayTemplateTestCase(TestCase): - queryset = DeviceBayTemplate.objects.unrestricted() + queryset = DeviceBayTemplate.objects.all() filterset = DeviceBayTemplateFilterSet @classmethod @@ -1030,13 +1030,13 @@ class DeviceBayTemplateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype_id(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'devicetype_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) class DeviceRoleTestCase(TestCase): - queryset = DeviceRole.objects.unrestricted() + queryset = DeviceRole.objects.all() filterset = DeviceRoleFilterSet @classmethod @@ -1073,7 +1073,7 @@ class DeviceRoleTestCase(TestCase): class PlatformTestCase(TestCase): - queryset = Platform.objects.unrestricted() + queryset = Platform.objects.all() filterset = PlatformFilterSet @classmethod @@ -1114,7 +1114,7 @@ class PlatformTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_manufacturer(self): - manufacturers = Manufacturer.objects.unrestricted()[:2] + manufacturers = Manufacturer.objects.all()[:2] params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} @@ -1122,7 +1122,7 @@ class PlatformTestCase(TestCase): class DeviceTestCase(TestCase): - queryset = Device.objects.unrestricted() + queryset = Device.objects.all() filterset = DeviceFilterSet @classmethod @@ -1295,57 +1295,57 @@ class DeviceTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_manufacturer(self): - manufacturers = Manufacturer.objects.unrestricted()[:2] + manufacturers = Manufacturer.objects.all()[:2] params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicetype(self): - device_types = DeviceType.objects.unrestricted()[:2] + device_types = DeviceType.objects.all()[:2] params = {'device_type_id': [device_types[0].pk, device_types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_devicerole(self): - device_roles = DeviceRole.objects.unrestricted()[:2] + device_roles = DeviceRole.objects.all()[:2] params = {'role_id': [device_roles[0].pk, device_roles[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'role': [device_roles[0].slug, device_roles[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_platform(self): - platforms = Platform.objects.unrestricted()[:2] + platforms = Platform.objects.all()[:2] params = {'platform_id': [platforms[0].pk, platforms[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'platform': [platforms[0].slug, platforms[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_rackgroup(self): - rack_groups = RackGroup.objects.unrestricted()[:2] + rack_groups = RackGroup.objects.all()[:2] params = {'rack_group_id': [rack_groups[0].pk, rack_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_rack(self): - racks = Rack.objects.unrestricted()[:2] + racks = Rack.objects.all()[:2] params = {'rack_id': [racks[0].pk, racks[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_cluster(self): - clusters = Cluster.objects.unrestricted()[:2] + clusters = Cluster.objects.all()[:2] params = {'cluster_id': [clusters[0].pk, clusters[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -1380,7 +1380,7 @@ class DeviceTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) def test_virtual_chassis_id(self): - params = {'virtual_chassis_id': [VirtualChassis.objects.unrestricted().first().pk]} + params = {'virtual_chassis_id': [VirtualChassis.objects.first().pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_virtual_chassis_member(self): @@ -1438,14 +1438,14 @@ class DeviceTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -1453,7 +1453,7 @@ class DeviceTestCase(TestCase): class ConsolePortTestCase(TestCase): - queryset = ConsolePort.objects.unrestricted() + queryset = ConsolePort.objects.all() filterset = ConsolePortFilterSet @classmethod @@ -1520,21 +1520,21 @@ class ConsolePortTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} @@ -1548,7 +1548,7 @@ class ConsolePortTestCase(TestCase): class ConsoleServerPortTestCase(TestCase): - queryset = ConsoleServerPort.objects.unrestricted() + queryset = ConsoleServerPort.objects.all() filterset = ConsoleServerPortFilterSet @classmethod @@ -1615,21 +1615,21 @@ class ConsoleServerPortTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} @@ -1643,7 +1643,7 @@ class ConsoleServerPortTestCase(TestCase): class PowerPortTestCase(TestCase): - queryset = PowerPort.objects.unrestricted() + queryset = PowerPort.objects.all() filterset = PowerPortFilterSet @classmethod @@ -1718,21 +1718,21 @@ class PowerPortTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} @@ -1746,7 +1746,7 @@ class PowerPortTestCase(TestCase): class PowerOutletTestCase(TestCase): - queryset = PowerOutlet.objects.unrestricted() + queryset = PowerOutlet.objects.all() filterset = PowerOutletFilterSet @classmethod @@ -1818,21 +1818,21 @@ class PowerOutletTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} @@ -1846,7 +1846,7 @@ class PowerOutletTestCase(TestCase): class InterfaceTestCase(TestCase): - queryset = Interface.objects.unrestricted() + queryset = Interface.objects.all() filterset = InterfaceFilterSet @classmethod @@ -1930,21 +1930,21 @@ class InterfaceTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} @@ -1972,7 +1972,7 @@ class InterfaceTestCase(TestCase): class FrontPortTestCase(TestCase): - queryset = FrontPort.objects.unrestricted() + queryset = FrontPort.objects.all() filterset = FrontPortFilterSet @classmethod @@ -2046,21 +2046,21 @@ class FrontPortTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} @@ -2074,7 +2074,7 @@ class FrontPortTestCase(TestCase): class RearPortTestCase(TestCase): - queryset = RearPort.objects.unrestricted() + queryset = RearPort.objects.all() filterset = RearPortFilterSet @classmethod @@ -2142,21 +2142,21 @@ class RearPortTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} @@ -2170,7 +2170,7 @@ class RearPortTestCase(TestCase): class DeviceBayTestCase(TestCase): - queryset = DeviceBay.objects.unrestricted() + queryset = DeviceBay.objects.all() filterset = DeviceBayFilterSet @classmethod @@ -2220,21 +2220,21 @@ class DeviceBayTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} @@ -2242,7 +2242,7 @@ class DeviceBayTestCase(TestCase): class InventoryItemTestCase(TestCase): - queryset = InventoryItem.objects.unrestricted() + queryset = InventoryItem.objects.all() filterset = InventoryItemFilterSet @classmethod @@ -2318,14 +2318,14 @@ class InventoryItemTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'site': [sites[0].slug, sites[1].slug]} @@ -2333,7 +2333,7 @@ class InventoryItemTestCase(TestCase): def test_device(self): # TODO: Allow multiple values - device = Device.objects.unrestricted().first() + device = Device.objects.first() params = {'device_id': device.pk} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': device.name} @@ -2345,7 +2345,7 @@ class InventoryItemTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_manufacturer(self): - manufacturers = Manufacturer.objects.unrestricted()[:2] + manufacturers = Manufacturer.objects.all()[:2] params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'manufacturer': [manufacturers[0].slug, manufacturers[1].slug]} @@ -2359,7 +2359,7 @@ class InventoryItemTestCase(TestCase): class VirtualChassisTestCase(TestCase): - queryset = VirtualChassis.objects.unrestricted() + queryset = VirtualChassis.objects.all() filterset = VirtualChassisFilterSet @classmethod @@ -2414,14 +2414,14 @@ class VirtualChassisTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} @@ -2429,7 +2429,7 @@ class VirtualChassisTestCase(TestCase): class CableTestCase(TestCase): - queryset = Cable.objects.unrestricted() + queryset = Cable.objects.all() filterset = CableFilterSet @classmethod @@ -2524,28 +2524,28 @@ class CableTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) params = {'device': [devices[0].name, devices[1].name]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) def test_rack(self): - racks = Rack.objects.unrestricted()[:2] + racks = Rack.objects.all()[:2] params = {'rack_id': [racks[0].pk, racks[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) params = {'rack': [racks[0].name, racks[1].name]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) def test_site(self): - site = Site.objects.unrestricted()[:2] + site = Site.objects.all()[:2] params = {'site_id': [site[0].pk, site[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) params = {'site': [site[0].slug, site[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) def test_tenant(self): - tenant = Tenant.objects.unrestricted()[:2] + tenant = Tenant.objects.all()[:2] params = {'tenant_id': [tenant[0].pk, tenant[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant': [tenant[0].slug, tenant[1].slug]} @@ -2553,7 +2553,7 @@ class CableTestCase(TestCase): class PowerPanelTestCase(TestCase): - queryset = PowerPanel.objects.unrestricted() + queryset = PowerPanel.objects.all() filterset = PowerPanelFilterSet @classmethod @@ -2598,27 +2598,27 @@ class PowerPanelTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_rack_group(self): - rack_groups = RackGroup.objects.unrestricted()[:2] + rack_groups = RackGroup.objects.all()[:2] params = {'rack_group_id': [rack_groups[0].pk, rack_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) class PowerFeedTestCase(TestCase): - queryset = PowerFeed.objects.unrestricted() + queryset = PowerFeed.objects.all() filterset = PowerFeedFilterSet @classmethod @@ -2698,26 +2698,26 @@ class PowerFeedTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_power_panel_id(self): - power_panels = PowerPanel.objects.unrestricted()[:2] + power_panels = PowerPanel.objects.all()[:2] params = {'power_panel_id': [power_panels[0].pk, power_panels[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_rack_id(self): - racks = Rack.objects.unrestricted()[:2] + racks = Rack.objects.all()[:2] params = {'rack_id': [racks[0].pk, racks[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) diff --git a/netbox/extras/filters.py b/netbox/extras/filters.py index 8223f2e48..e8962da01 100644 --- a/netbox/extras/filters.py +++ b/netbox/extras/filters.py @@ -130,83 +130,83 @@ class ConfigContextFilterSet(BaseFilterSet): ) region_id = django_filters.ModelMultipleChoiceFilter( field_name='regions', - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), label='Region', ) region = django_filters.ModelMultipleChoiceFilter( field_name='regions__slug', - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='sites', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site', ) site = django_filters.ModelMultipleChoiceFilter( field_name='sites__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) role_id = django_filters.ModelMultipleChoiceFilter( field_name='roles', - queryset=DeviceRole.objects.unrestricted(), + queryset=DeviceRole.objects.all(), label='Role', ) role = django_filters.ModelMultipleChoiceFilter( field_name='roles__slug', - queryset=DeviceRole.objects.unrestricted(), + queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) platform_id = django_filters.ModelMultipleChoiceFilter( field_name='platforms', - queryset=Platform.objects.unrestricted(), + queryset=Platform.objects.all(), label='Platform', ) platform = django_filters.ModelMultipleChoiceFilter( field_name='platforms__slug', - queryset=Platform.objects.unrestricted(), + queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) cluster_group_id = django_filters.ModelMultipleChoiceFilter( field_name='cluster_groups', - queryset=ClusterGroup.objects.unrestricted(), + queryset=ClusterGroup.objects.all(), label='Cluster group', ) cluster_group = django_filters.ModelMultipleChoiceFilter( field_name='cluster_groups__slug', - queryset=ClusterGroup.objects.unrestricted(), + queryset=ClusterGroup.objects.all(), to_field_name='slug', label='Cluster group (slug)', ) cluster_id = django_filters.ModelMultipleChoiceFilter( field_name='clusters', - queryset=Cluster.objects.unrestricted(), + queryset=Cluster.objects.all(), label='Cluster', ) tenant_group_id = django_filters.ModelMultipleChoiceFilter( field_name='tenant_groups', - queryset=TenantGroup.objects.unrestricted(), + queryset=TenantGroup.objects.all(), label='Tenant group', ) tenant_group = django_filters.ModelMultipleChoiceFilter( field_name='tenant_groups__slug', - queryset=TenantGroup.objects.unrestricted(), + queryset=TenantGroup.objects.all(), to_field_name='slug', label='Tenant group (slug)', ) tenant_id = django_filters.ModelMultipleChoiceFilter( field_name='tenants', - queryset=Tenant.objects.unrestricted(), + queryset=Tenant.objects.all(), label='Tenant', ) tenant = django_filters.ModelMultipleChoiceFilter( field_name='tenants__slug', - queryset=Tenant.objects.unrestricted(), + queryset=Tenant.objects.all(), to_field_name='slug', label='Tenant (slug)', ) diff --git a/netbox/extras/middleware.py b/netbox/extras/middleware.py index 51c281750..c8be8755f 100644 --- a/netbox/extras/middleware.py +++ b/netbox/extras/middleware.py @@ -145,7 +145,7 @@ class ObjectChangeMiddleware(object): # one or more changes being logged. if settings.CHANGELOG_RETENTION and random.randint(1, 100) == 1: cutoff = timezone.now() - timedelta(days=settings.CHANGELOG_RETENTION) - purged_count, _ = ObjectChange.objects.unrestricted().filter( + purged_count, _ = ObjectChange.objects.filter( time__lt=cutoff ).delete() diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index fcfcfefb3..9b6de22c6 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -540,7 +540,7 @@ class ConfigContextModel(models.Model): # Compile all config data, overwriting lower-weight values with higher-weight values where a collision occurs data = OrderedDict() - for context in ConfigContext.objects.unrestricted().get_for_object(self): + for context in ConfigContext.objects.get_for_object(self): data = deepmerge(data, context.data) # If the object has local config context data defined, merge it last diff --git a/netbox/extras/tests/test_filters.py b/netbox/extras/tests/test_filters.py index aed12cd73..72db138e2 100644 --- a/netbox/extras/tests/test_filters.py +++ b/netbox/extras/tests/test_filters.py @@ -11,7 +11,7 @@ from virtualization.models import Cluster, ClusterGroup, ClusterType class GraphTestCase(TestCase): - queryset = Graph.objects.unrestricted() + queryset = Graph.objects.all() filterset = GraphFilterSet @classmethod @@ -46,7 +46,7 @@ class GraphTestCase(TestCase): class ExportTemplateTestCase(TestCase): - queryset = ExportTemplate.objects.unrestricted() + queryset = ExportTemplate.objects.all() filterset = ExportTemplateFilterSet @classmethod @@ -79,7 +79,7 @@ class ExportTemplateTestCase(TestCase): class ConfigContextTestCase(TestCase): - queryset = ConfigContext.objects.unrestricted() + queryset = ConfigContext.objects.all() filterset = ConfigContextFilterSet @classmethod @@ -176,54 +176,54 @@ class ConfigContextTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_role(self): - device_roles = DeviceRole.objects.unrestricted()[:2] + device_roles = DeviceRole.objects.all()[:2] params = {'role_id': [device_roles[0].pk, device_roles[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'role': [device_roles[0].slug, device_roles[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_platform(self): - platforms = Platform.objects.unrestricted()[:2] + platforms = Platform.objects.all()[:2] params = {'platform_id': [platforms[0].pk, platforms[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'platform': [platforms[0].slug, platforms[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_cluster_group(self): - cluster_groups = ClusterGroup.objects.unrestricted()[:2] + cluster_groups = ClusterGroup.objects.all()[:2] params = {'cluster_group_id': [cluster_groups[0].pk, cluster_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'cluster_group': [cluster_groups[0].slug, cluster_groups[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_cluster(self): - clusters = Cluster.objects.unrestricted()[:2] + clusters = Cluster.objects.all()[:2] params = {'cluster_id': [clusters[0].pk, clusters[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant_(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant': [tenants[0].slug, tenants[1].slug]} diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index 5e258e46f..8abf2e551 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -276,8 +276,7 @@ class VLANViewSet(CustomFieldModelViewSet): class ServiceViewSet(ModelViewSet): queryset = Service.objects.prefetch_related( - Prefetch('ipaddresses', queryset=IPAddress.objects.unrestricted()), - 'device', 'virtual_machine', 'tags' + 'device', 'virtual_machine', 'tags', 'ipaddresses' ) serializer_class = serializers.ServiceSerializer filterset_class = filters.ServiceFilterSet diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index 5b9042412..0856c9f1c 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -71,12 +71,12 @@ class AggregateFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilt label='Prefix', ) rir_id = django_filters.ModelMultipleChoiceFilter( - queryset=RIR.objects.unrestricted(), + queryset=RIR.objects.all(), label='RIR (ID)', ) rir = django_filters.ModelMultipleChoiceFilter( field_name='rir__slug', - queryset=RIR.objects.unrestricted(), + queryset=RIR.objects.all(), to_field_name='slug', label='RIR (slug)', ) @@ -148,40 +148,40 @@ class PrefixFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Cre label='Mask length', ) vrf_id = django_filters.ModelMultipleChoiceFilter( - queryset=VRF.objects.unrestricted(), + queryset=VRF.objects.all(), label='VRF', ) vrf = django_filters.ModelMultipleChoiceFilter( field_name='vrf__rd', - queryset=VRF.objects.unrestricted(), + queryset=VRF.objects.all(), to_field_name='rd', label='VRF (RD)', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) vlan_id = django_filters.ModelMultipleChoiceFilter( - queryset=VLAN.objects.unrestricted(), + queryset=VLAN.objects.all(), label='VLAN (ID)', ) vlan_vid = django_filters.NumberFilter( @@ -189,12 +189,12 @@ class PrefixFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Cre label='VLAN number (1-4095)', ) role_id = django_filters.ModelMultipleChoiceFilter( - queryset=Role.objects.unrestricted(), + queryset=Role.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='role__slug', - queryset=Role.objects.unrestricted(), + queryset=Role.objects.all(), to_field_name='slug', label='Role (slug)', ) @@ -290,12 +290,12 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, label='Mask length', ) vrf_id = django_filters.ModelMultipleChoiceFilter( - queryset=VRF.objects.unrestricted(), + queryset=VRF.objects.all(), label='VRF', ) vrf = django_filters.ModelMultipleChoiceFilter( field_name='vrf__rd', - queryset=VRF.objects.unrestricted(), + queryset=VRF.objects.all(), to_field_name='rd', label='VRF (RD)', ) @@ -321,24 +321,24 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, ) interface = django_filters.ModelMultipleChoiceFilter( field_name='interface__name', - queryset=Interface.objects.unrestricted(), + queryset=Interface.objects.all(), to_field_name='name', label='Interface (name)', ) interface_id = django_filters.ModelMultipleChoiceFilter( field_name='interface', - queryset=Interface.objects.unrestricted(), + queryset=Interface.objects.all(), label='Interface (ID)', ) vminterface = django_filters.ModelMultipleChoiceFilter( field_name='vminterface__name', - queryset=VMInterface.objects.unrestricted(), + queryset=VMInterface.objects.all(), to_field_name='name', label='VM interface (name)', ) vminterface_id = django_filters.ModelMultipleChoiceFilter( field_name='vminterface', - queryset=VMInterface.objects.unrestricted(), + queryset=VMInterface.objects.all(), label='VM interface (ID)', ) assigned_to_interface = django_filters.BooleanFilter( @@ -390,7 +390,7 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, return queryset.filter(address__net_mask_length=value) def filter_device(self, queryset, name, value): - devices = Device.objects.unrestricted().filter(**{'{}__in'.format(name): value}) + devices = Device.objects.filter(**{'{}__in'.format(name): value}) if not devices.exists(): return queryset.none() interface_ids = [] @@ -401,12 +401,12 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, ) def filter_virtual_machine(self, queryset, name, value): - virtual_machines = VirtualMachine.objects.unrestricted().filter(**{'{}__in'.format(name): value}) + virtual_machines = VirtualMachine.objects.filter(**{'{}__in'.format(name): value}) if not virtual_machines.exists(): return queryset.none() interface_ids = [] for vm in virtual_machines: - interface_ids.extend(vm.interfaces.unrestricted().values_list('id', flat=True)) + interface_ids.extend(vm.interfaces.values_list('id', flat=True)) return queryset.filter( vminterface__in=interface_ids ) @@ -417,25 +417,25 @@ class IPAddressFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, class VLANGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet): region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) @@ -451,45 +451,45 @@ class VLANFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Creat label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = django_filters.ModelMultipleChoiceFilter( - queryset=VLANGroup.objects.unrestricted(), + queryset=VLANGroup.objects.all(), label='Group (ID)', ) group = django_filters.ModelMultipleChoiceFilter( field_name='group__slug', - queryset=VLANGroup.objects.unrestricted(), + queryset=VLANGroup.objects.all(), to_field_name='slug', label='Group', ) role_id = django_filters.ModelMultipleChoiceFilter( - queryset=Role.objects.unrestricted(), + queryset=Role.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='role__slug', - queryset=Role.objects.unrestricted(), + queryset=Role.objects.all(), to_field_name='slug', label='Role (slug)', ) @@ -520,22 +520,22 @@ class ServiceFilterSet(BaseFilterSet, CreatedUpdatedFilterSet): label='Search', ) device_id = django_filters.ModelMultipleChoiceFilter( - queryset=Device.objects.unrestricted(), + queryset=Device.objects.all(), label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( field_name='device__name', - queryset=Device.objects.unrestricted(), + queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( - queryset=VirtualMachine.objects.unrestricted(), + queryset=VirtualMachine.objects.all(), label='Virtual machine (ID)', ) virtual_machine = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__name', - queryset=VirtualMachine.objects.unrestricted(), + queryset=VirtualMachine.objects.all(), to_field_name='name', label='Virtual machine (name)', ) diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index 7ccb85d59..b6abe3f2d 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -215,7 +215,7 @@ class Aggregate(ChangeLoggedModel, CustomFieldModel): }) # Ensure that the aggregate being added is not covered by an existing aggregate - covering_aggregates = Aggregate.objects.unrestricted().filter( + covering_aggregates = Aggregate.objects.filter( prefix__net_contains_or_equals=str(self.prefix) ) if self.pk: @@ -228,7 +228,7 @@ class Aggregate(ChangeLoggedModel, CustomFieldModel): }) # Ensure that the aggregate being added does not cover an existing aggregate - covered_aggregates = Aggregate.objects.unrestricted().filter(prefix__net_contained=str(self.prefix)) + covered_aggregates = Aggregate.objects.filter(prefix__net_contained=str(self.prefix)) if self.pk: covered_aggregates = covered_aggregates.exclude(pk=self.pk) if covered_aggregates: @@ -256,7 +256,7 @@ class Aggregate(ChangeLoggedModel, CustomFieldModel): """ Determine the prefix utilization of the aggregate and return it as a percentage. """ - queryset = Prefix.objects.unrestricted().filter(prefix__net_contained_or_equal=str(self.prefix)) + queryset = Prefix.objects.filter(prefix__net_contained_or_equal=str(self.prefix)) child_prefixes = netaddr.IPSet([p.prefix for p in queryset]) return int(float(child_prefixes.size) / self.prefix.size * 100) @@ -470,7 +470,7 @@ class Prefix(ChangeLoggedModel, CustomFieldModel): return self.STATUS_CLASS_MAP.get(self.status) def get_duplicates(self): - return Prefix.objects.unrestricted().filter(vrf=self.vrf, prefix=str(self.prefix)).exclude(pk=self.pk) + return Prefix.objects.filter(vrf=self.vrf, prefix=str(self.prefix)).exclude(pk=self.pk) def get_child_prefixes(self): """ @@ -478,9 +478,9 @@ class Prefix(ChangeLoggedModel, CustomFieldModel): Prefixes belonging to any VRF. """ if self.vrf is None and self.status == PrefixStatusChoices.STATUS_CONTAINER: - return Prefix.objects.unrestricted().filter(prefix__net_contained=str(self.prefix)) + return Prefix.objects.filter(prefix__net_contained=str(self.prefix)) else: - return Prefix.objects.unrestricted().filter(prefix__net_contained=str(self.prefix), vrf=self.vrf) + return Prefix.objects.filter(prefix__net_contained=str(self.prefix), vrf=self.vrf) def get_child_ips(self): """ @@ -488,9 +488,9 @@ class Prefix(ChangeLoggedModel, CustomFieldModel): child IPAddresses belonging to any VRF. """ if self.vrf is None and self.status == PrefixStatusChoices.STATUS_CONTAINER: - return IPAddress.objects.unrestricted().filter(address__net_host_contained=str(self.prefix)) + return IPAddress.objects.filter(address__net_host_contained=str(self.prefix)) else: - return IPAddress.objects.unrestricted().filter(address__net_host_contained=str(self.prefix), vrf=self.vrf) + return IPAddress.objects.filter(address__net_host_contained=str(self.prefix), vrf=self.vrf) def get_available_prefixes(self): """ @@ -554,7 +554,7 @@ class Prefix(ChangeLoggedModel, CustomFieldModel): "container", calculate utilization based on child prefixes. For all others, count child IP addresses. """ if self.status == PrefixStatusChoices.STATUS_CONTAINER: - queryset = Prefix.objects.unrestricted().filter( + queryset = Prefix.objects.filter( prefix__net_contained=str(self.prefix), vrf=self.vrf ) @@ -694,7 +694,7 @@ class IPAddress(ChangeLoggedModel, CustomFieldModel): return reverse('ipam:ipaddress', args=[self.pk]) def get_duplicates(self): - return IPAddress.objects.unrestricted().filter( + return IPAddress.objects.filter( vrf=self.vrf, address__net_host=str(self.address.ip) ).exclude(pk=self.pk) @@ -726,7 +726,7 @@ class IPAddress(ChangeLoggedModel, CustomFieldModel): # Check for primary IP assignment that doesn't match the assigned device/VM if self.pk and type(self.assigned_object) is Interface: - device = Device.objects.unrestricted().filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first() + device = Device.objects.filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first() if device: if self.assigned_object is None: raise ValidationError({ @@ -738,7 +738,7 @@ class IPAddress(ChangeLoggedModel, CustomFieldModel): f"{self.assigned_object.device} ({self.assigned_object})" }) elif self.pk and type(self.assigned_object) is VMInterface: - vm = VirtualMachine.unrestricted().objects.filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first() + vm = VirtualMachine.objects.filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first() if vm: if self.assigned_object is None: raise ValidationError({ @@ -867,7 +867,7 @@ class VLANGroup(ChangeLoggedModel): """ Return the first available VLAN ID (1-4094) in the group. """ - vlan_ids = VLAN.objects.unrestricted().filter(group=self).values_list('vid', flat=True) + vlan_ids = VLAN.objects.filter(group=self).values_list('vid', flat=True) for i in range(1, 4095): if i not in vlan_ids: return i @@ -994,7 +994,7 @@ class VLAN(ChangeLoggedModel, CustomFieldModel): def get_members(self): # Return all interfaces assigned to this VLAN - return Interface.objects.unrestricted().filter( + return Interface.objects.filter( Q(untagged_vlan_id=self.pk) | Q(tagged_vlans=self.pk) ).distinct() diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py index 213a61fa9..705a7d91a 100644 --- a/netbox/ipam/tests/test_api.py +++ b/netbox/ipam/tests/test_api.py @@ -411,7 +411,7 @@ class VLANTest(APIViewTestCases.APIViewTestCase): """ Attempt and fail to delete a VLAN with a Prefix assigned to it. """ - vlan = VLAN.objects.unrestricted().first() + vlan = VLAN.objects.first() Prefix.objects.create(prefix=IPNetwork('192.0.2.0/24'), vlan=vlan) self.add_permissions('ipam.delete_vlan') diff --git a/netbox/ipam/tests/test_filters.py b/netbox/ipam/tests/test_filters.py index 273fa2083..560313f0a 100644 --- a/netbox/ipam/tests/test_filters.py +++ b/netbox/ipam/tests/test_filters.py @@ -9,7 +9,7 @@ from tenancy.models import Tenant, TenantGroup class VRFTestCase(TestCase): - queryset = VRF.objects.unrestricted() + queryset = VRF.objects.all() filterset = VRFFilterSet @classmethod @@ -59,14 +59,14 @@ class VRFTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -74,7 +74,7 @@ class VRFTestCase(TestCase): class RIRTestCase(TestCase): - queryset = RIR.objects.unrestricted() + queryset = RIR.objects.all() filterset = RIRFilterSet @classmethod @@ -114,7 +114,7 @@ class RIRTestCase(TestCase): class AggregateTestCase(TestCase): - queryset = Aggregate.objects.unrestricted() + queryset = Aggregate.objects.all() filterset = AggregateFilterSet @classmethod @@ -155,7 +155,7 @@ class AggregateTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) def test_rir(self): - rirs = RIR.objects.unrestricted()[:2] + rirs = RIR.objects.all()[:2] params = {'rir_id': [rirs[0].pk, rirs[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'rir': [rirs[0].slug, rirs[1].slug]} @@ -163,7 +163,7 @@ class AggregateTestCase(TestCase): class RoleTestCase(TestCase): - queryset = Role.objects.unrestricted() + queryset = Role.objects.all() filterset = RoleFilterSet @classmethod @@ -190,7 +190,7 @@ class RoleTestCase(TestCase): class PrefixTestCase(TestCase): - queryset = Prefix.objects.unrestricted() + queryset = Prefix.objects.all() filterset = PrefixFilterSet @classmethod @@ -295,28 +295,28 @@ class PrefixTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_vrf(self): - vrfs = VRF.objects.unrestricted()[:2] + vrfs = VRF.objects.all()[:2] params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'vrf': [vrfs[0].rd, vrfs[1].rd]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_vlan(self): - vlans = VLAN.objects.unrestricted()[:2] + vlans = VLAN.objects.all()[:2] params = {'vlan_id': [vlans[0].pk, vlans[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) # TODO: Test for multiple values @@ -324,7 +324,7 @@ class PrefixTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_role(self): - roles = Role.objects.unrestricted()[:2] + roles = Role.objects.all()[:2] params = {'role_id': [roles[0].pk, roles[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'role': [roles[0].slug, roles[1].slug]} @@ -335,14 +335,14 @@ class PrefixTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -350,7 +350,7 @@ class PrefixTestCase(TestCase): class IPAddressTestCase(TestCase): - queryset = IPAddress.objects.unrestricted() + queryset = IPAddress.objects.all() filterset = IPAddressFilterSet @classmethod @@ -466,35 +466,35 @@ class IPAddressTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_vrf(self): - vrfs = VRF.objects.unrestricted()[:2] + vrfs = VRF.objects.all()[:2] params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'vrf': [vrfs[0].rd, vrfs[1].rd]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_virtual_machine(self): - vms = VirtualMachine.objects.unrestricted()[:2] + vms = VirtualMachine.objects.all()[:2] params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'virtual_machine': [vms[0].name, vms[1].name]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_interface(self): - interfaces = Interface.objects.unrestricted()[:2] + interfaces = Interface.objects.all()[:2] params = {'interface_id': [interfaces[0].pk, interfaces[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'interface': ['Interface 1', 'Interface 2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_vminterface(self): - vminterfaces = VMInterface.objects.unrestricted()[:2] + vminterfaces = VMInterface.objects.all()[:2] params = {'vminterface_id': [vminterfaces[0].pk, vminterfaces[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'vminterface': ['Interface 1', 'Interface 2']} @@ -515,14 +515,14 @@ class IPAddressTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -530,7 +530,7 @@ class IPAddressTestCase(TestCase): class VLANGroupTestCase(TestCase): - queryset = VLANGroup.objects.unrestricted() + queryset = VLANGroup.objects.all() filterset = VLANGroupFilterSet @classmethod @@ -577,14 +577,14 @@ class VLANGroupTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} @@ -592,7 +592,7 @@ class VLANGroupTestCase(TestCase): class VLANTestCase(TestCase): - queryset = VLAN.objects.unrestricted() + queryset = VLAN.objects.all() filterset = VLANFilterSet @classmethod @@ -666,28 +666,28 @@ class VLANTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_group(self): - groups = VLANGroup.objects.unrestricted()[:2] + groups = VLANGroup.objects.all()[:2] params = {'group_id': [groups[0].pk, groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'group': [groups[0].slug, groups[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_role(self): - roles = Role.objects.unrestricted()[:2] + roles = Role.objects.all()[:2] params = {'role_id': [roles[0].pk, roles[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'role': [roles[0].slug, roles[1].slug]} @@ -698,14 +698,14 @@ class VLANTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -713,7 +713,7 @@ class VLANTestCase(TestCase): class ServiceTestCase(TestCase): - queryset = Service.objects.unrestricted() + queryset = Service.objects.all() filterset = ServiceFilterSet @classmethod @@ -768,14 +768,14 @@ class ServiceTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_virtual_machine(self): - vms = VirtualMachine.objects.unrestricted()[:2] + vms = VirtualMachine.objects.all()[:2] params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'virtual_machine': [vms[0].name, vms[1].name]} diff --git a/netbox/ipam/tests/test_models.py b/netbox/ipam/tests/test_models.py index 51d1d9684..6091aa70e 100644 --- a/netbox/ipam/tests/test_models.py +++ b/netbox/ipam/tests/test_models.py @@ -43,7 +43,7 @@ class TestPrefix(TestCase): Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')), Prefix(prefix=netaddr.IPNetwork('192.0.2.0/24')), )) - duplicate_prefix_pks = [p.pk for p in prefixes[0].get_duplicates().unrestricted()] + duplicate_prefix_pks = [p.pk for p in prefixes[0].get_duplicates()] self.assertSetEqual(set(duplicate_prefix_pks), {prefixes[1].pk, prefixes[2].pk}) @@ -227,7 +227,7 @@ class TestIPAddress(TestCase): IPAddress(address=netaddr.IPNetwork('192.0.2.1/24')), IPAddress(address=netaddr.IPNetwork('192.0.2.1/24')), )) - duplicate_ip_pks = [p.pk for p in ips[0].get_duplicates().unrestricted()] + duplicate_ip_pks = [p.pk for p in ips[0].get_duplicates()] self.assertSetEqual(set(duplicate_ip_pks), {ips[1].pk, ips[2].pk}) diff --git a/netbox/ipam/tests/test_ordering.py b/netbox/ipam/tests/test_ordering.py index 9427c0cdf..690501e53 100644 --- a/netbox/ipam/tests/test_ordering.py +++ b/netbox/ipam/tests/test_ordering.py @@ -86,7 +86,7 @@ class PrefixOrderingTestCase(OrderingTestBase): Prefix.objects.bulk_create(prefixes) # Test - self._compare(Prefix.objects.unrestricted(), prefixes) + self._compare(Prefix.objects.all(), prefixes) def test_prefix_complex_ordering(self): """ @@ -122,7 +122,7 @@ class PrefixOrderingTestCase(OrderingTestBase): Prefix.objects.bulk_create(prefixes) # Test - self._compare(Prefix.objects.unrestricted(), prefixes) + self._compare(Prefix.objects.all(), prefixes) class IPAddressOrderingTestCase(OrderingTestBase): @@ -173,4 +173,4 @@ class IPAddressOrderingTestCase(OrderingTestBase): IPAddress.objects.bulk_create(addresses) # Test - self._compare(IPAddress.objects.unrestricted(), addresses) + self._compare(IPAddress.objects.all(), addresses) diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 8964004c9..6d0411866 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -729,8 +729,7 @@ class VLANGroupVLANsView(ObjectView): class VLANListView(ObjectListView): queryset = VLAN.objects.prefetch_related( - Prefetch('prefixes', Prefix.objects.unrestricted()), - 'site', 'group', 'tenant', 'role' + 'site', 'group', 'tenant', 'role', 'prefixes' ) filterset = filters.VLANFilterSet filterset_form = forms.VLANFilterForm @@ -820,9 +819,7 @@ class ServiceListView(ObjectListView): class ServiceView(ObjectView): - queryset = Service.objects.prefetch_related( - Prefetch('ipaddresses', IPAddress.objects.unrestricted()) - ) + queryset = Service.objects.prefetch_related('ipaddresses') def get(self, request, pk): @@ -834,9 +831,7 @@ class ServiceView(ObjectView): class ServiceEditView(ObjectEditView): - queryset = Service.objects.prefetch_related( - Prefetch('ipaddresses', IPAddress.objects.unrestricted()) - ) + queryset = Service.objects.prefetch_related('ipaddresses') model_form = forms.ServiceForm template_name = 'ipam/service_edit.html' diff --git a/netbox/netbox/authentication.py b/netbox/netbox/authentication.py index 6b58becf0..8971bdb52 100644 --- a/netbox/netbox/authentication.py +++ b/netbox/netbox/authentication.py @@ -24,7 +24,7 @@ class ObjectPermissionBackend(ModelBackend): Return all permissions granted to the user by an ObjectPermission. """ # Retrieve all assigned and enabled ObjectPermissions - object_permissions = ObjectPermission.objects.unrestricted().filter( + object_permissions = ObjectPermission.objects.filter( Q(users=user_obj) | Q(groups__user=user_obj), enabled=True ).prefetch_related('object_types') diff --git a/netbox/secrets/filters.py b/netbox/secrets/filters.py index fee9b4981..78f25952a 100644 --- a/netbox/secrets/filters.py +++ b/netbox/secrets/filters.py @@ -26,22 +26,22 @@ class SecretFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterS label='Search', ) role_id = django_filters.ModelMultipleChoiceFilter( - queryset=SecretRole.objects.unrestricted(), + queryset=SecretRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='role__slug', - queryset=SecretRole.objects.unrestricted(), + queryset=SecretRole.objects.all(), to_field_name='slug', label='Role (slug)', ) device_id = django_filters.ModelMultipleChoiceFilter( - queryset=Device.objects.unrestricted(), + queryset=Device.objects.all(), label='Device (ID)', ) device = django_filters.ModelMultipleChoiceFilter( field_name='device__name', - queryset=Device.objects.unrestricted(), + queryset=Device.objects.all(), to_field_name='name', label='Device (name)', ) diff --git a/netbox/secrets/tests/test_filters.py b/netbox/secrets/tests/test_filters.py index a32d22239..b7ac73f1d 100644 --- a/netbox/secrets/tests/test_filters.py +++ b/netbox/secrets/tests/test_filters.py @@ -6,7 +6,7 @@ from secrets.models import Secret, SecretRole class SecretRoleTestCase(TestCase): - queryset = SecretRole.objects.unrestricted() + queryset = SecretRole.objects.all() filterset = SecretRoleFilterSet @classmethod @@ -33,7 +33,7 @@ class SecretRoleTestCase(TestCase): class SecretTestCase(TestCase): - queryset = Secret.objects.unrestricted() + queryset = Secret.objects.all() filterset = SecretFilterSet @classmethod @@ -76,14 +76,14 @@ class SecretTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_role(self): - roles = SecretRole.objects.unrestricted()[:2] + roles = SecretRole.objects.all()[:2] params = {'role_id': [roles[0].pk, roles[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'role': [roles[0].slug, roles[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_device(self): - devices = Device.objects.unrestricted()[:2] + devices = Device.objects.all()[:2] params = {'device_id': [devices[0].pk, devices[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'device': [devices[0].name, devices[1].name]} diff --git a/netbox/tenancy/filters.py b/netbox/tenancy/filters.py index 42137d7ca..af5ee0b2c 100644 --- a/netbox/tenancy/filters.py +++ b/netbox/tenancy/filters.py @@ -15,12 +15,12 @@ __all__ = ( class TenantGroupFilterSet(BaseFilterSet, NameSlugSearchFilterSet): parent_id = django_filters.ModelMultipleChoiceFilter( - queryset=TenantGroup.objects.unrestricted(), + queryset=TenantGroup.objects.all(), label='Tenant group (ID)', ) parent = django_filters.ModelMultipleChoiceFilter( field_name='parent__slug', - queryset=TenantGroup.objects.unrestricted(), + queryset=TenantGroup.objects.all(), to_field_name='slug', label='Tenant group group (slug)', ) @@ -36,13 +36,13 @@ class TenantFilterSet(BaseFilterSet, CustomFieldFilterSet, CreatedUpdatedFilterS label='Search', ) group_id = TreeNodeMultipleChoiceFilter( - queryset=TenantGroup.objects.unrestricted(), + queryset=TenantGroup.objects.all(), field_name='group', lookup_expr='in', label='Tenant group (ID)', ) group = TreeNodeMultipleChoiceFilter( - queryset=TenantGroup.objects.unrestricted(), + queryset=TenantGroup.objects.all(), field_name='group', lookup_expr='in', to_field_name='slug', @@ -70,24 +70,24 @@ class TenancyFilterSet(django_filters.FilterSet): An inheritable FilterSet for models which support Tenant assignment. """ tenant_group_id = TreeNodeMultipleChoiceFilter( - queryset=TenantGroup.objects.unrestricted(), + queryset=TenantGroup.objects.all(), field_name='tenant__group', lookup_expr='in', label='Tenant Group (ID)', ) tenant_group = TreeNodeMultipleChoiceFilter( - queryset=TenantGroup.objects.unrestricted(), + queryset=TenantGroup.objects.all(), field_name='tenant__group', to_field_name='slug', lookup_expr='in', label='Tenant Group (slug)', ) tenant_id = django_filters.ModelMultipleChoiceFilter( - queryset=Tenant.objects.unrestricted(), + queryset=Tenant.objects.all(), label='Tenant (ID)', ) tenant = django_filters.ModelMultipleChoiceFilter( - queryset=Tenant.objects.unrestricted(), + queryset=Tenant.objects.all(), field_name='tenant__slug', to_field_name='slug', label='Tenant (slug)', diff --git a/netbox/tenancy/tests/test_filters.py b/netbox/tenancy/tests/test_filters.py index 31540c27b..c78b25083 100644 --- a/netbox/tenancy/tests/test_filters.py +++ b/netbox/tenancy/tests/test_filters.py @@ -5,7 +5,7 @@ from tenancy.models import Tenant, TenantGroup class TenantGroupTestCase(TestCase): - queryset = TenantGroup.objects.unrestricted() + queryset = TenantGroup.objects.all() filterset = TenantGroupFilterSet @classmethod @@ -52,7 +52,7 @@ class TenantGroupTestCase(TestCase): class TenantTestCase(TestCase): - queryset = Tenant.objects.unrestricted() + queryset = Tenant.objects.all() filterset = TenantFilterSet @classmethod @@ -86,7 +86,7 @@ class TenantTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_group(self): - group = TenantGroup.objects.unrestricted()[:2] + group = TenantGroup.objects.all()[:2] params = {'group_id': [group[0].pk, group[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'group': [group[0].slug, group[1].slug]} diff --git a/netbox/users/admin.py b/netbox/users/admin.py index 5795eeb7b..2c3963c0a 100644 --- a/netbox/users/admin.py +++ b/netbox/users/admin.py @@ -180,7 +180,7 @@ class ActionListFilter(admin.SimpleListFilter): def lookups(self, request, model_admin): options = set() - for action_list in ObjectPermission.objects.unrestricted().values_list('actions', flat=True).distinct(): + for action_list in ObjectPermission.objects.values_list('actions', flat=True).distinct(): options.update(action_list) return [ (action, action) for action in sorted(options) @@ -196,7 +196,7 @@ class ObjectTypeListFilter(admin.SimpleListFilter): parameter_name = 'object_type' def lookups(self, request, model_admin): - object_types = ObjectPermission.objects.unrestricted().values_list('id', flat=True).distinct() + object_types = ObjectPermission.objects.values_list('id', flat=True).distinct() content_types = ContentType.objects.filter(pk__in=object_types).order_by('app_label', 'model') return [ (ct.pk, ct) for ct in content_types @@ -238,7 +238,7 @@ class ObjectPermissionAdmin(admin.ModelAdmin): ] def get_queryset(self, request): - return super().get_queryset(request).unrestricted().prefetch_related('object_types', 'users', 'groups') + return super().get_queryset(request).prefetch_related('object_types', 'users', 'groups') def get_name(self, obj): return obj.name or f'Permission #{obj.pk}' diff --git a/netbox/utilities/api.py b/netbox/utilities/api.py index 56f9f87b4..7c413890b 100644 --- a/netbox/utilities/api.py +++ b/netbox/utilities/api.py @@ -244,8 +244,6 @@ class WritableNestedSerializer(serializers.ModelSerializer): if isinstance(data, dict): params = dict_to_filter_params(data) queryset = self.Meta.model.objects - if hasattr(queryset, 'restrict'): - queryset = queryset.unrestricted() try: return queryset.get(**params) except ObjectDoesNotExist: @@ -274,8 +272,6 @@ class WritableNestedSerializer(serializers.ModelSerializer): # Look up object by PK queryset = self.Meta.model.objects - if hasattr(queryset, 'restrict'): - queryset = queryset.unrestricted() try: return queryset.get(pk=int(data)) except ObjectDoesNotExist: diff --git a/netbox/utilities/mptt.py b/netbox/utilities/mptt.py index 25ce01a6c..1bae2053d 100644 --- a/netbox/utilities/mptt.py +++ b/netbox/utilities/mptt.py @@ -16,8 +16,4 @@ class TreeManager(Manager.from_queryset(TreeQuerySet), TreeManager_): """ Extend django-mptt's TreeManager to incorporate RestrictedQuerySet(). """ - def db_manager(self, using=None, hints=None): - manager = super().db_manager(using, hints) - - # Return an unrestricted QuerySet for use by MPTT - return manager.unrestricted() + pass diff --git a/netbox/utilities/querysets.py b/netbox/utilities/querysets.py index 5a867c04d..e748e7a23 100644 --- a/netbox/utilities/querysets.py +++ b/netbox/utilities/querysets.py @@ -1,5 +1,3 @@ -import logging - from django.db.models import Q, QuerySet from utilities.permissions import permission_is_exempt @@ -21,44 +19,6 @@ class DummyQuerySet: class RestrictedQuerySet(QuerySet): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Initialize the allow_evaluation flag to False. This indicates that the QuerySet has not yet been restricted. - self.allow_evaluation = False - - def _check_restriction(self): - # Raise a warning if the QuerySet is evaluated without first calling restrict() or unrestricted(). - if not getattr(self, 'allow_evaluation', False): - logger = logging.getLogger('netbox.RestrictedQuerySet') - logger.warning( - f'Evaluation of RestrictedQuerySet prior to calling restrict() or unrestricted(): {self.model}' - ) - - def _clone(self): - - # Persist the allow_evaluation flag when cloning the QuerySet. - c = super()._clone() - c.allow_evaluation = self.allow_evaluation - - return c - - def _fetch_all(self): - self._check_restriction() - return super()._fetch_all() - - def count(self): - self._check_restriction() - return super().count() - - def unrestricted(self): - """ - Bypass restriction for the QuerySet. This is necessary in cases where we are not interacting with the objects - directly (e.g. when filtering by related object). - """ - self.allow_evaluation = True - return self - def restrict(self, user, action='view'): """ Filter the QuerySet to return only objects on which the specified user has been granted the specified @@ -88,7 +48,4 @@ class RestrictedQuerySet(QuerySet): attrs |= Q(**perm_attrs) qs = self.filter(attrs) - # Allow QuerySet evaluation - qs.allow_evaluation = True - return qs diff --git a/netbox/utilities/testing/views.py b/netbox/utilities/testing/views.py index 98bc8ff02..95946a24a 100644 --- a/netbox/utilities/testing/views.py +++ b/netbox/utilities/testing/views.py @@ -158,10 +158,8 @@ class ModelTestCase(TestCase): def _get_queryset(self): """ - Return a base queryset suitable for use in test methods. Call unrestricted() if RestrictedQuerySet is in use. + Return a base queryset suitable for use in test methods. """ - if hasattr(self.model.objects, 'restrict'): - return self.model.objects.unrestricted() return self.model.objects.all() diff --git a/netbox/virtualization/api/views.py b/netbox/virtualization/api/views.py index df48e92e6..dde5a8d3f 100644 --- a/netbox/virtualization/api/views.py +++ b/netbox/virtualization/api/views.py @@ -79,8 +79,7 @@ class VirtualMachineViewSet(CustomFieldModelViewSet): class VMInterfaceViewSet(ModelViewSet): queryset = VMInterface.objects.prefetch_related( - Prefetch('tagged_vlans', queryset=VLAN.objects.unrestricted()), - 'virtual_machine', 'tags' + 'virtual_machine', 'tags', 'tagged_vlans' ) serializer_class = serializers.VMInterfaceSerializer filterset_class = filters.VMInterfaceFilterSet diff --git a/netbox/virtualization/filters.py b/netbox/virtualization/filters.py index 9e8816cb6..7cb37f323 100644 --- a/netbox/virtualization/filters.py +++ b/netbox/virtualization/filters.py @@ -40,45 +40,45 @@ class ClusterFilterSet(BaseFilterSet, TenancyFilterSet, CustomFieldFilterSet, Cr label='Search', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='site__region', lookup_expr='in', to_field_name='slug', label='Region (slug)', ) site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) group_id = django_filters.ModelMultipleChoiceFilter( - queryset=ClusterGroup.objects.unrestricted(), + queryset=ClusterGroup.objects.all(), label='Parent group (ID)', ) group = django_filters.ModelMultipleChoiceFilter( field_name='group__slug', - queryset=ClusterGroup.objects.unrestricted(), + queryset=ClusterGroup.objects.all(), to_field_name='slug', label='Parent group (slug)', ) type_id = django_filters.ModelMultipleChoiceFilter( - queryset=ClusterType.objects.unrestricted(), + queryset=ClusterType.objects.all(), label='Cluster type (ID)', ) type = django_filters.ModelMultipleChoiceFilter( field_name='type__slug', - queryset=ClusterType.objects.unrestricted(), + queryset=ClusterType.objects.all(), to_field_name='slug', label='Cluster type (slug)', ) @@ -114,38 +114,38 @@ class VirtualMachineFilterSet( ) cluster_group_id = django_filters.ModelMultipleChoiceFilter( field_name='cluster__group', - queryset=ClusterGroup.objects.unrestricted(), + queryset=ClusterGroup.objects.all(), label='Cluster group (ID)', ) cluster_group = django_filters.ModelMultipleChoiceFilter( field_name='cluster__group__slug', - queryset=ClusterGroup.objects.unrestricted(), + queryset=ClusterGroup.objects.all(), to_field_name='slug', label='Cluster group (slug)', ) cluster_type_id = django_filters.ModelMultipleChoiceFilter( field_name='cluster__type', - queryset=ClusterType.objects.unrestricted(), + queryset=ClusterType.objects.all(), label='Cluster type (ID)', ) cluster_type = django_filters.ModelMultipleChoiceFilter( field_name='cluster__type__slug', - queryset=ClusterType.objects.unrestricted(), + queryset=ClusterType.objects.all(), to_field_name='slug', label='Cluster type (slug)', ) cluster_id = django_filters.ModelMultipleChoiceFilter( - queryset=Cluster.objects.unrestricted(), + queryset=Cluster.objects.all(), label='Cluster (ID)', ) region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='cluster__site__region', lookup_expr='in', label='Region (ID)', ) region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.unrestricted(), + queryset=Region.objects.all(), field_name='cluster__site__region', lookup_expr='in', to_field_name='slug', @@ -153,32 +153,32 @@ class VirtualMachineFilterSet( ) site_id = django_filters.ModelMultipleChoiceFilter( field_name='cluster__site', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), label='Site (ID)', ) site = django_filters.ModelMultipleChoiceFilter( field_name='cluster__site__slug', - queryset=Site.objects.unrestricted(), + queryset=Site.objects.all(), to_field_name='slug', label='Site (slug)', ) role_id = django_filters.ModelMultipleChoiceFilter( - queryset=DeviceRole.objects.unrestricted(), + queryset=DeviceRole.objects.all(), label='Role (ID)', ) role = django_filters.ModelMultipleChoiceFilter( field_name='role__slug', - queryset=DeviceRole.objects.unrestricted(), + queryset=DeviceRole.objects.all(), to_field_name='slug', label='Role (slug)', ) platform_id = django_filters.ModelMultipleChoiceFilter( - queryset=Platform.objects.unrestricted(), + queryset=Platform.objects.all(), label='Platform (ID)', ) platform = django_filters.ModelMultipleChoiceFilter( field_name='platform__slug', - queryset=Platform.objects.unrestricted(), + queryset=Platform.objects.all(), to_field_name='slug', label='Platform (slug)', ) @@ -208,23 +208,23 @@ class VMInterfaceFilterSet(BaseFilterSet): ) cluster_id = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__cluster', - queryset=Cluster.objects.unrestricted(), + queryset=Cluster.objects.all(), label='Cluster (ID)', ) cluster = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__cluster__name', - queryset=Cluster.objects.unrestricted(), + queryset=Cluster.objects.all(), to_field_name='name', label='Cluster', ) virtual_machine_id = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine', - queryset=VirtualMachine.objects.unrestricted(), + queryset=VirtualMachine.objects.all(), label='Virtual machine (ID)', ) virtual_machine = django_filters.ModelMultipleChoiceFilter( field_name='virtual_machine__name', - queryset=VirtualMachine.objects.unrestricted(), + queryset=VirtualMachine.objects.all(), to_field_name='name', label='Virtual machine', ) diff --git a/netbox/virtualization/models.py b/netbox/virtualization/models.py index edc6fb423..f787aef0e 100644 --- a/netbox/virtualization/models.py +++ b/netbox/virtualization/models.py @@ -177,7 +177,7 @@ class Cluster(ChangeLoggedModel, CustomFieldModel): # If the Cluster is assigned to a Site, verify that all host Devices belong to that Site. if self.pk and self.site: - nonsite_devices = Device.objects.unrestricted().filter(cluster=self).exclude(site=self.site).count() + nonsite_devices = Device.objects.filter(cluster=self).exclude(site=self.site).count() if nonsite_devices: raise ValidationError({ 'site': "{} devices are assigned as hosts for this cluster but are not in site {}".format( @@ -317,7 +317,7 @@ class VirtualMachine(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): # Check for a duplicate name on a VM assigned to the same Cluster and no Tenant. This is necessary # because Django does not consider two NULL fields to be equal, and thus will not trigger a violation # of the uniqueness constraint without manual intervention. - if self.tenant is None and VirtualMachine.objects.unrestricted().exclude(pk=self.pk).filter( + if self.tenant is None and VirtualMachine.objects.exclude(pk=self.pk).filter( name=self.name, tenant__isnull=True ): raise ValidationError({ diff --git a/netbox/virtualization/tests/test_api.py b/netbox/virtualization/tests/test_api.py index 4d79602f5..6ddcdf2ef 100644 --- a/netbox/virtualization/tests/test_api.py +++ b/netbox/virtualization/tests/test_api.py @@ -164,7 +164,7 @@ class VirtualMachineTest(APIViewTestCases.APIViewTestCase): """ Check that config context data is included by default in the virtual machines list. """ - virtualmachine = VirtualMachine.objects.unrestricted().first() + virtualmachine = VirtualMachine.objects.first() url = '{}?id={}'.format(reverse('virtualization-api:virtualmachine-list'), virtualmachine.pk) self.add_permissions('virtualization.view_virtualmachine') @@ -187,7 +187,7 @@ class VirtualMachineTest(APIViewTestCases.APIViewTestCase): """ data = { 'name': 'Virtual Machine 1', - 'cluster': Cluster.objects.unrestricted().first().pk, + 'cluster': Cluster.objects.first().pk, } url = reverse('virtualization-api:virtualmachine-list') self.add_permissions('virtualization.add_virtualmachine') @@ -260,7 +260,7 @@ class VMInterfaceTest(APIViewTestCases.APIViewTestCase): self.add_permissions('virtualization.view_vminterface') url = reverse('virtualization-api:vminterface-graphs', kwargs={ - 'pk': VMInterface.objects.unrestricted().first().pk + 'pk': VMInterface.objects.first().pk }) response = self.client.get(url, **self.header) diff --git a/netbox/virtualization/tests/test_filters.py b/netbox/virtualization/tests/test_filters.py index 2204e20a2..ad452ec51 100644 --- a/netbox/virtualization/tests/test_filters.py +++ b/netbox/virtualization/tests/test_filters.py @@ -8,7 +8,7 @@ from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMac class ClusterTypeTestCase(TestCase): - queryset = ClusterType.objects.unrestricted() + queryset = ClusterType.objects.all() filterset = ClusterTypeFilterSet @classmethod @@ -39,7 +39,7 @@ class ClusterTypeTestCase(TestCase): class ClusterGroupTestCase(TestCase): - queryset = ClusterGroup.objects.unrestricted() + queryset = ClusterGroup.objects.all() filterset = ClusterGroupFilterSet @classmethod @@ -70,7 +70,7 @@ class ClusterGroupTestCase(TestCase): class ClusterTestCase(TestCase): - queryset = Cluster.objects.unrestricted() + queryset = Cluster.objects.all() filterset = ClusterFilterSet @classmethod @@ -137,42 +137,42 @@ class ClusterTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_group(self): - groups = ClusterGroup.objects.unrestricted()[:2] + groups = ClusterGroup.objects.all()[:2] params = {'group_id': [groups[0].pk, groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'group': [groups[0].slug, groups[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_type(self): - types = ClusterType.objects.unrestricted()[:2] + types = ClusterType.objects.all()[:2] params = {'type_id': [types[0].pk, types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'type': [types[0].slug, types[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -180,7 +180,7 @@ class ClusterTestCase(TestCase): class VirtualMachineTestCase(TestCase): - queryset = VirtualMachine.objects.unrestricted() + queryset = VirtualMachine.objects.all() filterset = VirtualMachineFilterSet @classmethod @@ -291,21 +291,21 @@ class VirtualMachineTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_cluster_group(self): - groups = ClusterGroup.objects.unrestricted()[:2] + groups = ClusterGroup.objects.all()[:2] params = {'cluster_group_id': [groups[0].pk, groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'cluster_group': [groups[0].slug, groups[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_cluster_type(self): - types = ClusterType.objects.unrestricted()[:2] + types = ClusterType.objects.all()[:2] params = {'cluster_type_id': [types[0].pk, types[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'cluster_type': [types[0].slug, types[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_cluster(self): - clusters = Cluster.objects.unrestricted()[:2] + clusters = Cluster.objects.all()[:2] params = {'cluster_id': [clusters[0].pk, clusters[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) # TODO: 'cluster' should match on name @@ -313,28 +313,28 @@ class VirtualMachineTestCase(TestCase): # self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_region(self): - regions = Region.objects.unrestricted()[:2] + regions = Region.objects.all()[:2] params = {'region_id': [regions[0].pk, regions[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'region': [regions[0].slug, regions[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_site(self): - sites = Site.objects.unrestricted()[:2] + sites = Site.objects.all()[:2] params = {'site_id': [sites[0].pk, sites[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_role(self): - roles = DeviceRole.objects.unrestricted()[:2] + roles = DeviceRole.objects.all()[:2] params = {'role_id': [roles[0].pk, roles[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'role': [roles[0].slug, roles[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_platform(self): - platforms = Platform.objects.unrestricted()[:2] + platforms = Platform.objects.all()[:2] params = {'platform_id': [platforms[0].pk, platforms[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'platform': [platforms[0].slug, platforms[1].slug]} @@ -351,14 +351,14 @@ class VirtualMachineTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant(self): - tenants = Tenant.objects.unrestricted()[:2] + tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant': [tenants[0].slug, tenants[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_tenant_group(self): - tenant_groups = TenantGroup.objects.unrestricted()[:2] + tenant_groups = TenantGroup.objects.all()[:2] params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} @@ -366,7 +366,7 @@ class VirtualMachineTestCase(TestCase): class VMInterfaceTestCase(TestCase): - queryset = VMInterface.objects.unrestricted() + queryset = VMInterface.objects.all() filterset = VMInterfaceFilterSet @classmethod @@ -420,7 +420,7 @@ class VMInterfaceTestCase(TestCase): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_virtual_machine(self): - vms = VirtualMachine.objects.unrestricted()[:2] + vms = VirtualMachine.objects.all()[:2] params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'virtual_machine': [vms[0].name, vms[1].name]}