mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-28 11:26:26 -06:00
Fixes #729: Corrected cancellation links when editing secondary objects
This commit is contained in:
parent
9f5a74972f
commit
83dea60830
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user