Fixes #729: Corrected cancellation links when editing secondary objects

This commit is contained in:
Jeremy Stretch 2016-12-08 12:20:45 -05:00
parent 9f5a74972f
commit 83dea60830
6 changed files with 46 additions and 52 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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