Răsfoiți Sursa

#4416: Add individual delete views for organizational objects

Jeremy Stretch 5 ani în urmă
părinte
comite
8959d2e0a7

+ 1 - 0
netbox/circuits/urls.py

@@ -25,6 +25,7 @@ urlpatterns = [
     path('circuit-types/import/', views.CircuitTypeBulkImportView.as_view(), name='circuittype_import'),
     path('circuit-types/delete/', views.CircuitTypeBulkDeleteView.as_view(), name='circuittype_bulk_delete'),
     path('circuit-types/<slug:slug>/edit/', views.CircuitTypeEditView.as_view(), name='circuittype_edit'),
+    path('circuit-types/<slug:slug>/delete/', views.CircuitTypeDeleteView.as_view(), name='circuittype_delete'),
     path('circuit-types/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='circuittype_changelog', kwargs={'model': CircuitType}),
 
     # Circuits

+ 4 - 0
netbox/circuits/views.py

@@ -99,6 +99,10 @@ class CircuitTypeEditView(ObjectEditView):
     model_form = forms.CircuitTypeForm
 
 
+class CircuitTypeDeleteView(ObjectDeleteView):
+    queryset = CircuitType.objects.all()
+
+
 class CircuitTypeBulkImportView(BulkImportView):
     queryset = CircuitType.objects.all()
     model_form = forms.CircuitTypeCSVForm

+ 6 - 0
netbox/dcim/urls.py

@@ -18,6 +18,7 @@ urlpatterns = [
     path('regions/import/', views.RegionBulkImportView.as_view(), name='region_import'),
     path('regions/delete/', views.RegionBulkDeleteView.as_view(), name='region_bulk_delete'),
     path('regions/<int:pk>/edit/', views.RegionEditView.as_view(), name='region_edit'),
+    path('regions/<int:pk>/delete/', views.RegionDeleteView.as_view(), name='region_delete'),
     path('regions/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='region_changelog', kwargs={'model': Region}),
 
     # Sites
@@ -38,6 +39,7 @@ urlpatterns = [
     path('rack-groups/import/', views.RackGroupBulkImportView.as_view(), name='rackgroup_import'),
     path('rack-groups/delete/', views.RackGroupBulkDeleteView.as_view(), name='rackgroup_bulk_delete'),
     path('rack-groups/<int:pk>/edit/', views.RackGroupEditView.as_view(), name='rackgroup_edit'),
+    path('rack-groups/<int:pk>/delete/', views.RackGroupDeleteView.as_view(), name='rackgroup_delete'),
     path('rack-groups/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='rackgroup_changelog', kwargs={'model': RackGroup}),
 
     # Rack roles
@@ -46,6 +48,7 @@ urlpatterns = [
     path('rack-roles/import/', views.RackRoleBulkImportView.as_view(), name='rackrole_import'),
     path('rack-roles/delete/', views.RackRoleBulkDeleteView.as_view(), name='rackrole_bulk_delete'),
     path('rack-roles/<int:pk>/edit/', views.RackRoleEditView.as_view(), name='rackrole_edit'),
+    path('rack-roles/<int:pk>/delete/', views.RackRoleDeleteView.as_view(), name='rackrole_delete'),
     path('rack-roles/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='rackrole_changelog', kwargs={'model': RackRole}),
 
     # Rack reservations
@@ -78,6 +81,7 @@ urlpatterns = [
     path('manufacturers/import/', views.ManufacturerBulkImportView.as_view(), name='manufacturer_import'),
     path('manufacturers/delete/', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'),
     path('manufacturers/<slug:slug>/edit/', views.ManufacturerEditView.as_view(), name='manufacturer_edit'),
+    path('manufacturers/<slug:slug>/delete/', views.ManufacturerDeleteView.as_view(), name='manufacturer_delete'),
     path('manufacturers/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='manufacturer_changelog', kwargs={'model': Manufacturer}),
 
     # Device types
@@ -153,6 +157,7 @@ urlpatterns = [
     path('device-roles/import/', views.DeviceRoleBulkImportView.as_view(), name='devicerole_import'),
     path('device-roles/delete/', views.DeviceRoleBulkDeleteView.as_view(), name='devicerole_bulk_delete'),
     path('device-roles/<slug:slug>/edit/', views.DeviceRoleEditView.as_view(), name='devicerole_edit'),
+    path('device-roles/<slug:slug>/delete/', views.DeviceRoleDeleteView.as_view(), name='devicerole_delete'),
     path('device-roles/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='devicerole_changelog', kwargs={'model': DeviceRole}),
 
     # Platforms
@@ -161,6 +166,7 @@ urlpatterns = [
     path('platforms/import/', views.PlatformBulkImportView.as_view(), name='platform_import'),
     path('platforms/delete/', views.PlatformBulkDeleteView.as_view(), name='platform_bulk_delete'),
     path('platforms/<slug:slug>/edit/', views.PlatformEditView.as_view(), name='platform_edit'),
+    path('platforms/<slug:slug>/delete/', views.PlatformDeleteView.as_view(), name='platform_delete'),
     path('platforms/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='platform_changelog', kwargs={'model': Platform}),
 
     # Devices

+ 24 - 0
netbox/dcim/views.py

@@ -122,6 +122,10 @@ class RegionEditView(ObjectEditView):
     model_form = forms.RegionForm
 
 
+class RegionDeleteView(ObjectDeleteView):
+    queryset = Region.objects.all()
+
+
 class RegionBulkImportView(BulkImportView):
     queryset = Region.objects.all()
     model_form = forms.RegionCSVForm
@@ -223,6 +227,10 @@ class RackGroupEditView(ObjectEditView):
     model_form = forms.RackGroupForm
 
 
+class RackGroupDeleteView(ObjectDeleteView):
+    queryset = RackGroup.objects.all()
+
+
 class RackGroupBulkImportView(BulkImportView):
     queryset = RackGroup.objects.all()
     model_form = forms.RackGroupCSVForm
@@ -249,6 +257,10 @@ class RackRoleEditView(ObjectEditView):
     model_form = forms.RackRoleForm
 
 
+class RackRoleDeleteView(ObjectDeleteView):
+    queryset = RackRole.objects.all()
+
+
 class RackRoleBulkImportView(BulkImportView):
     queryset = RackRole.objects.all()
     model_form = forms.RackRoleCSVForm
@@ -462,6 +474,10 @@ class ManufacturerEditView(ObjectEditView):
     model_form = forms.ManufacturerForm
 
 
+class ManufacturerDeleteView(ObjectDeleteView):
+    queryset = Manufacturer.objects.all()
+
+
 class ManufacturerBulkImportView(BulkImportView):
     queryset = Manufacturer.objects.all()
     model_form = forms.ManufacturerCSVForm
@@ -860,6 +876,10 @@ class DeviceRoleEditView(ObjectEditView):
     model_form = forms.DeviceRoleForm
 
 
+class DeviceRoleDeleteView(ObjectDeleteView):
+    queryset = DeviceRole.objects.all()
+
+
 class DeviceRoleBulkImportView(BulkImportView):
     queryset = DeviceRole.objects.all()
     model_form = forms.DeviceRoleCSVForm
@@ -885,6 +905,10 @@ class PlatformEditView(ObjectEditView):
     model_form = forms.PlatformForm
 
 
+class PlatformDeleteView(ObjectDeleteView):
+    queryset = Platform.objects.all()
+
+
 class PlatformBulkImportView(BulkImportView):
     queryset = Platform.objects.all()
     model_form = forms.PlatformCSVForm

+ 3 - 0
netbox/ipam/urls.py

@@ -24,6 +24,7 @@ urlpatterns = [
     path('rirs/import/', views.RIRBulkImportView.as_view(), name='rir_import'),
     path('rirs/delete/', views.RIRBulkDeleteView.as_view(), name='rir_bulk_delete'),
     path('rirs/<slug:slug>/edit/', views.RIREditView.as_view(), name='rir_edit'),
+    path('rirs/<slug:slug>/delete/', views.RIRDeleteView.as_view(), name='rir_delete'),
     path('vrfs/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='rir_changelog', kwargs={'model': RIR}),
 
     # Aggregates
@@ -43,6 +44,7 @@ urlpatterns = [
     path('roles/import/', views.RoleBulkImportView.as_view(), name='role_import'),
     path('roles/delete/', views.RoleBulkDeleteView.as_view(), name='role_bulk_delete'),
     path('roles/<slug:slug>/edit/', views.RoleEditView.as_view(), name='role_edit'),
+    path('roles/<slug:slug>/delete/', views.RoleDeleteView.as_view(), name='role_delete'),
     path('roles/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='role_changelog', kwargs={'model': Role}),
 
     # Prefixes
@@ -77,6 +79,7 @@ urlpatterns = [
     path('vlan-groups/import/', views.VLANGroupBulkImportView.as_view(), name='vlangroup_import'),
     path('vlan-groups/delete/', views.VLANGroupBulkDeleteView.as_view(), name='vlangroup_bulk_delete'),
     path('vlan-groups/<int:pk>/edit/', views.VLANGroupEditView.as_view(), name='vlangroup_edit'),
+    path('vlan-groups/<int:pk>/delete/', views.VLANGroupDeleteView.as_view(), name='vlangroup_delete'),
     path('vlan-groups/<int:pk>/vlans/', views.VLANGroupVLANsView.as_view(), name='vlangroup_vlans'),
     path('vlan-groups/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='vlangroup_changelog', kwargs={'model': VLANGroup}),
 

+ 12 - 0
netbox/ipam/views.py

@@ -160,6 +160,10 @@ class RIREditView(ObjectEditView):
     model_form = forms.RIRForm
 
 
+class RIRDeleteView(ObjectDeleteView):
+    queryset = RIR.objects.all()
+
+
 class RIRBulkImportView(BulkImportView):
     queryset = RIR.objects.all()
     model_form = forms.RIRCSVForm
@@ -290,6 +294,10 @@ class RoleEditView(ObjectEditView):
     model_form = forms.RoleForm
 
 
+class RoleDeleteView(ObjectDeleteView):
+    queryset = Role.objects.all()
+
+
 class RoleBulkImportView(BulkImportView):
     queryset = Role.objects.all()
     model_form = forms.RoleCSVForm
@@ -653,6 +661,10 @@ class VLANGroupEditView(ObjectEditView):
     model_form = forms.VLANGroupForm
 
 
+class VLANGroupDeleteView(ObjectDeleteView):
+    queryset = VLANGroup.objects.all()
+
+
 class VLANGroupBulkImportView(BulkImportView):
     queryset = VLANGroup.objects.all()
     model_form = forms.VLANGroupCSVForm

+ 1 - 0
netbox/secrets/urls.py

@@ -13,6 +13,7 @@ urlpatterns = [
     path('secret-roles/import/', views.SecretRoleBulkImportView.as_view(), name='secretrole_import'),
     path('secret-roles/delete/', views.SecretRoleBulkDeleteView.as_view(), name='secretrole_bulk_delete'),
     path('secret-roles/<slug:slug>/edit/', views.SecretRoleEditView.as_view(), name='secretrole_edit'),
+    path('secret-roles/<slug:slug>/delete/', views.SecretRoleDeleteView.as_view(), name='secretrole_delete'),
     path('secret-roles/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='secretrole_changelog', kwargs={'model': SecretRole}),
 
     # Secrets

+ 4 - 0
netbox/secrets/views.py

@@ -38,6 +38,10 @@ class SecretRoleEditView(ObjectEditView):
     model_form = forms.SecretRoleForm
 
 
+class SecretRoleDeleteView(ObjectDeleteView):
+    queryset = SecretRole.objects.all()
+
+
 class SecretRoleBulkImportView(BulkImportView):
     queryset = SecretRole.objects.all()
     model_form = forms.SecretRoleCSVForm

+ 1 - 0
netbox/tenancy/urls.py

@@ -13,6 +13,7 @@ urlpatterns = [
     path('tenant-groups/import/', views.TenantGroupBulkImportView.as_view(), name='tenantgroup_import'),
     path('tenant-groups/delete/', views.TenantGroupBulkDeleteView.as_view(), name='tenantgroup_bulk_delete'),
     path('tenant-groups/<slug:slug>/edit/', views.TenantGroupEditView.as_view(), name='tenantgroup_edit'),
+    path('tenant-groups/<slug:slug>/delete/', views.TenantGroupDeleteView.as_view(), name='tenantgroup_delete'),
     path('tenant-groups/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='tenantgroup_changelog', kwargs={'model': TenantGroup}),
 
     # Tenants

+ 4 - 0
netbox/tenancy/views.py

@@ -32,6 +32,10 @@ class TenantGroupEditView(ObjectEditView):
     model_form = forms.TenantGroupForm
 
 
+class TenantGroupDeleteView(ObjectDeleteView):
+    queryset = TenantGroup.objects.all()
+
+
 class TenantGroupBulkImportView(BulkImportView):
     queryset = TenantGroup.objects.all()
     model_form = forms.TenantGroupCSVForm

+ 1 - 0
netbox/utilities/testing/views.py

@@ -905,6 +905,7 @@ class ViewTestCases:
         GetObjectChangelogViewTestCase,
         CreateObjectViewTestCase,
         EditObjectViewTestCase,
+        DeleteObjectViewTestCase,
         ListObjectsViewTestCase,
         BulkImportObjectsViewTestCase,
         BulkDeleteObjectsViewTestCase,

+ 2 - 0
netbox/virtualization/urls.py

@@ -14,6 +14,7 @@ urlpatterns = [
     path('cluster-types/import/', views.ClusterTypeBulkImportView.as_view(), name='clustertype_import'),
     path('cluster-types/delete/', views.ClusterTypeBulkDeleteView.as_view(), name='clustertype_bulk_delete'),
     path('cluster-types/<slug:slug>/edit/', views.ClusterTypeEditView.as_view(), name='clustertype_edit'),
+    path('cluster-types/<slug:slug>/delete/', views.ClusterTypeDeleteView.as_view(), name='clustertype_delete'),
     path('cluster-types/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='clustertype_changelog', kwargs={'model': ClusterType}),
 
     # Cluster groups
@@ -22,6 +23,7 @@ urlpatterns = [
     path('cluster-groups/import/', views.ClusterGroupBulkImportView.as_view(), name='clustergroup_import'),
     path('cluster-groups/delete/', views.ClusterGroupBulkDeleteView.as_view(), name='clustergroup_bulk_delete'),
     path('cluster-groups/<slug:slug>/edit/', views.ClusterGroupEditView.as_view(), name='clustergroup_edit'),
+    path('cluster-groups/<slug:slug>/delete/', views.ClusterGroupDeleteView.as_view(), name='clustergroup_delete'),
     path('cluster-groups/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='clustergroup_changelog', kwargs={'model': ClusterGroup}),
 
     # Clusters

+ 8 - 0
netbox/virtualization/views.py

@@ -31,6 +31,10 @@ class ClusterTypeEditView(ObjectEditView):
     model_form = forms.ClusterTypeForm
 
 
+class ClusterTypeDeleteView(ObjectDeleteView):
+    queryset = ClusterType.objects.all()
+
+
 class ClusterTypeBulkImportView(BulkImportView):
     queryset = ClusterType.objects.all()
     model_form = forms.ClusterTypeCSVForm
@@ -56,6 +60,10 @@ class ClusterGroupEditView(ObjectEditView):
     model_form = forms.ClusterGroupForm
 
 
+class ClusterGroupDeleteView(ObjectDeleteView):
+    queryset = ClusterGroup.objects.all()
+
+
 class ClusterGroupBulkImportView(BulkImportView):
     queryset = ClusterGroup.objects.all()
     model_form = forms.ClusterGroupCSVForm