Browse Source

Fixes #729: Corrected cancellation links when editing secondary objects

Jeremy Stretch 8 years ago
parent
commit
5035a9567b
6 changed files with 46 additions and 52 deletions
  1. 4 4
      netbox/circuits/views.py
  2. 14 15
      netbox/dcim/views.py
  3. 11 12
      netbox/ipam/views.py
  4. 2 2
      netbox/secrets/views.py
  5. 3 3
      netbox/tenancy/views.py
  6. 12 16
      netbox/utilities/views.py

+ 4 - 4
netbox/circuits/views.py

@@ -42,7 +42,7 @@ class ProviderEditView(PermissionRequiredMixin, ObjectEditView):
     model = Provider
     form_class = forms.ProviderForm
     template_name = 'circuits/provider_edit.html'
-    cancel_url = 'circuits:provider_list'
+    obj_list_url = 'circuits:provider_list'
 
 
 class ProviderDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@@ -88,8 +88,8 @@ class CircuitTypeEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'circuits.change_circuittype'
     model = CircuitType
     form_class = forms.CircuitTypeForm
-    success_url = 'circuits:circuittype_list'
-    cancel_url = 'circuits:circuittype_list'
+    obj_list_url = 'circuits:circuittype_list'
+    use_obj_view = False
 
 
 class CircuitTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -126,7 +126,7 @@ class CircuitEditView(PermissionRequiredMixin, ObjectEditView):
     form_class = forms.CircuitForm
     fields_initial = ['site']
     template_name = 'circuits/circuit_edit.html'
-    cancel_url = 'circuits:circuit_list'
+    obj_list_url = 'circuits:circuit_list'
 
 
 class CircuitDeleteView(PermissionRequiredMixin, ObjectDeleteView):

+ 14 - 15
netbox/dcim/views.py

@@ -8,7 +8,6 @@ from django.contrib.auth.decorators import permission_required
 from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.core.exceptions import ValidationError
 from django.core.urlresolvers import reverse
-from django.db import transaction
 from django.db.models import Count
 from django.http import HttpResponseRedirect
 from django.shortcuts import get_object_or_404, redirect, render
@@ -99,7 +98,7 @@ class SiteEditView(PermissionRequiredMixin, ObjectEditView):
     model = Site
     form_class = forms.SiteForm
     template_name = 'dcim/site_edit.html'
-    cancel_url = 'dcim:site_list'
+    obj_list_url = 'dcim:site_list'
 
 
 class SiteDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@@ -141,8 +140,8 @@ class RackGroupEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_rackgroup'
     model = RackGroup
     form_class = forms.RackGroupForm
-    success_url = 'dcim:rackgroup_list'
-    cancel_url = 'dcim:rackgroup_list'
+    obj_list_url = 'dcim:rackgroup_list'
+    use_obj_view = False
 
 
 class RackGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -166,8 +165,8 @@ class RackRoleEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_rackrole'
     model = RackRole
     form_class = forms.RackRoleForm
-    success_url = 'dcim:rackrole_list'
-    cancel_url = 'dcim:rackrole_list'
+    obj_list_url = 'dcim:rackrole_list'
+    use_obj_view = False
 
 
 class RackRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -214,7 +213,7 @@ class RackEditView(PermissionRequiredMixin, ObjectEditView):
     model = Rack
     form_class = forms.RackForm
     template_name = 'dcim/rack_edit.html'
-    cancel_url = 'dcim:rack_list'
+    obj_list_url = 'dcim:rack_list'
 
 
 class RackDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@@ -260,8 +259,8 @@ class ManufacturerEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_manufacturer'
     model = Manufacturer
     form_class = forms.ManufacturerForm
-    success_url = 'dcim:manufacturer_list'
-    cancel_url = 'dcim:manufacturer_list'
+    obj_list_url = 'dcim:manufacturer_list'
+    use_obj_view = False
 
 
 class ManufacturerBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -332,7 +331,7 @@ class DeviceTypeEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_devicetype'
     model = DeviceType
     form_class = forms.DeviceTypeForm
-    cancel_url = 'dcim:devicetype_list'
+    obj_list_url = 'dcim:devicetype_list'
 
 
 class DeviceTypeDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@@ -497,8 +496,8 @@ class DeviceRoleEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_devicerole'
     model = DeviceRole
     form_class = forms.DeviceRoleForm
-    success_url = 'dcim:devicerole_list'
-    cancel_url = 'dcim:devicerole_list'
+    obj_list_url = 'dcim:devicerole_list'
+    use_obj_view = False
 
 
 class DeviceRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -522,8 +521,8 @@ class PlatformEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_platform'
     model = Platform
     form_class = forms.PlatformForm
-    success_url = 'dcim:platform_list'
-    cancel_url = 'dcim:platform_list'
+    obj_list_url = 'dcim:platform_list'
+    use_obj_view = False
 
 
 class PlatformBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -617,7 +616,7 @@ class DeviceEditView(PermissionRequiredMixin, ObjectEditView):
     form_class = forms.DeviceForm
     fields_initial = ['site', 'rack', 'position', 'face', 'device_bay']
     template_name = 'dcim/device_edit.html'
-    cancel_url = 'dcim:device_list'
+    obj_list_url = 'dcim:device_list'
 
 
 class DeviceDeleteView(PermissionRequiredMixin, ObjectDeleteView):

+ 11 - 12
netbox/ipam/views.py

@@ -1,4 +1,3 @@
-from collections import OrderedDict
 from django_tables2 import RequestConfig
 import netaddr
 
@@ -117,7 +116,7 @@ class VRFEditView(PermissionRequiredMixin, ObjectEditView):
     model = VRF
     form_class = forms.VRFForm
     template_name = 'ipam/vrf_edit.html'
-    cancel_url = 'ipam:vrf_list'
+    obj_list_url = 'ipam:vrf_list'
 
 
 class VRFDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@@ -241,8 +240,8 @@ class RIREditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.change_rir'
     model = RIR
     form_class = forms.RIRForm
-    success_url = 'ipam:rir_list'
-    cancel_url = 'ipam:rir_list'
+    obj_list_url = 'ipam:rir_list'
+    use_obj_view = False
 
 
 class RIRBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -307,7 +306,7 @@ class AggregateEditView(PermissionRequiredMixin, ObjectEditView):
     model = Aggregate
     form_class = forms.AggregateForm
     template_name = 'ipam/aggregate_edit.html'
-    cancel_url = 'ipam:aggregate_list'
+    obj_list_url = 'ipam:aggregate_list'
 
 
 class AggregateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@@ -353,8 +352,8 @@ class RoleEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.change_role'
     model = Role
     form_class = forms.RoleForm
-    success_url = 'ipam:role_list'
-    cancel_url = 'ipam:role_list'
+    obj_list_url = 'ipam:role_list'
+    use_obj_view = False
 
 
 class RoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -438,7 +437,7 @@ class PrefixEditView(PermissionRequiredMixin, ObjectEditView):
     form_class = forms.PrefixForm
     template_name = 'ipam/prefix_edit.html'
     fields_initial = ['vrf', 'tenant', 'site', 'prefix', 'vlan']
-    cancel_url = 'ipam:prefix_list'
+    obj_list_url = 'ipam:prefix_list'
 
 
 class PrefixDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@@ -602,7 +601,7 @@ class IPAddressEditView(PermissionRequiredMixin, ObjectEditView):
     form_class = forms.IPAddressForm
     fields_initial = ['address', 'vrf']
     template_name = 'ipam/ipaddress_edit.html'
-    cancel_url = 'ipam:ipaddress_list'
+    obj_list_url = 'ipam:ipaddress_list'
 
 
 class IPAddressDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@@ -665,8 +664,8 @@ class VLANGroupEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.change_vlangroup'
     model = VLANGroup
     form_class = forms.VLANGroupForm
-    success_url = 'ipam:vlangroup_list'
-    cancel_url = 'ipam:vlangroup_list'
+    obj_list_url = 'ipam:vlangroup_list'
+    use_obj_view = False
 
 
 class VLANGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -705,7 +704,7 @@ class VLANEditView(PermissionRequiredMixin, ObjectEditView):
     model = VLAN
     form_class = forms.VLANForm
     template_name = 'ipam/vlan_edit.html'
-    cancel_url = 'ipam:vlan_list'
+    obj_list_url = 'ipam:vlan_list'
 
 
 class VLANDeleteView(PermissionRequiredMixin, ObjectDeleteView):

+ 2 - 2
netbox/secrets/views.py

@@ -30,8 +30,8 @@ class SecretRoleEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'secrets.change_secretrole'
     model = SecretRole
     form_class = forms.SecretRoleForm
-    success_url = 'secrets:secretrole_list'
-    cancel_url = 'secrets:secretrole_list'
+    obj_list_url = 'secrets:secretrole_list'
+    use_obj_view = False
 
 
 class SecretRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):

+ 3 - 3
netbox/tenancy/views.py

@@ -28,8 +28,8 @@ class TenantGroupEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'tenancy.change_tenantgroup'
     model = TenantGroup
     form_class = forms.TenantGroupForm
-    success_url = 'tenancy:tenantgroup_list'
-    cancel_url = 'tenancy:tenantgroup_list'
+    obj_list_url = 'tenancy:tenantgroup_list'
+    use_obj_view = False
 
 
 class TenantGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
@@ -83,7 +83,7 @@ class TenantEditView(PermissionRequiredMixin, ObjectEditView):
     form_class = forms.TenantForm
     fields_initial = ['group']
     template_name = 'tenancy/tenant_edit.html'
-    cancel_url = 'tenancy:tenant_list'
+    obj_list_url = 'tenancy:tenant_list'
 
 
 class TenantDeleteView(PermissionRequiredMixin, ObjectDeleteView):

+ 12 - 16
netbox/utilities/views.py

@@ -119,8 +119,8 @@ class ObjectEditView(View):
     form_class = None
     fields_initial = []
     template_name = 'utilities/obj_edit.html'
-    success_url = None
-    cancel_url = None
+    obj_list_url = None
+    use_obj_view = True
 
     def get_object(self, kwargs):
         # Look up object by slug if one has been provided. Otherwise, use PK.
@@ -129,12 +129,13 @@ class ObjectEditView(View):
         else:
             return get_object_or_404(self.model, pk=kwargs['pk'])
 
-    def get_cancel_url(self, obj):
-        if hasattr(obj, 'get_absolute_url'):
-            return obj.get_absolute_url()
-        if hasattr(obj, 'get_parent_url'):
-            return obj.get_parent_url()
-        return reverse(self.cancel_url)
+    def get_redirect_url(self, obj):
+        if obj and self.use_obj_view:
+            if hasattr(obj, 'get_absolute_url'):
+                return obj.get_absolute_url()
+            if hasattr(obj, 'get_parent_url'):
+                return obj.get_parent_url()
+        return reverse(self.obj_list_url)
 
     def get(self, request, *args, **kwargs):
 
@@ -149,7 +150,7 @@ class ObjectEditView(View):
             'obj': obj,
             'obj_type': self.model._meta.verbose_name,
             'form': form,
-            'cancel_url': self.get_cancel_url(obj),
+            'cancel_url': self.get_redirect_url(obj),
         })
 
     def post(self, request, *args, **kwargs):
@@ -179,18 +180,13 @@ class ObjectEditView(View):
 
             if '_addanother' in request.POST:
                 return redirect(request.path)
-            elif self.success_url:
-                return redirect(self.success_url)
-            elif hasattr(obj, 'get_absolute_url'):
-                return redirect(obj.get_absolute_url())
-            elif hasattr(obj, 'get_parent_url'):
-                return redirect(obj.get_parent_url())
+            return redirect(self.get_redirect_url(obj))
 
         return render(request, self.template_name, {
             'obj': obj,
             'obj_type': self.model._meta.verbose_name,
             'form': form,
-            'cancel_url': self.get_cancel_url(obj),
+            'cancel_url': self.get_redirect_url(obj),
         })