diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 28c4d6844..292328d61 100644 --- a/netbox/circuits/views.py +++ b/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): diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index d31670446..d7fc2a88b 100644 --- a/netbox/dcim/views.py +++ b/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): diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 0be5b225e..0ad11a38c 100644 --- a/netbox/ipam/views.py +++ b/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): diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index a99af80b6..7880adfb2 100644 --- a/netbox/secrets/views.py +++ b/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): diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 1055fb9b3..821f6d7bf 100644 --- a/netbox/tenancy/views.py +++ b/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): diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index 76d15c331..1b4493281 100644 --- a/netbox/utilities/views.py +++ b/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), })