Standardized naming of return_url for all object views

This commit is contained in:
Jeremy Stretch 2017-01-23 14:07:26 -05:00
parent b70eca7661
commit 52420945b2
42 changed files with 181 additions and 179 deletions

View File

@ -47,7 +47,7 @@ class ProviderEditView(PermissionRequiredMixin, ObjectEditView):
model = Provider
form_class = forms.ProviderForm
template_name = 'circuits/provider_edit.html'
obj_list_url = 'circuits:provider_list'
default_return_url = 'circuits:provider_list'
class ProviderDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -61,7 +61,7 @@ class ProviderBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.ProviderImportForm
table = tables.ProviderTable
template_name = 'circuits/provider_import.html'
obj_list_url = 'circuits:provider_list'
default_return_url = 'circuits:provider_list'
class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -70,14 +70,14 @@ class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.ProviderFilter
form = forms.ProviderBulkEditForm
template_name = 'circuits/provider_bulk_edit.html'
default_redirect_url = 'circuits:provider_list'
default_return_url = 'circuits:provider_list'
class ProviderBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'circuits.delete_provider'
cls = Provider
filter = filters.ProviderFilter
default_redirect_url = 'circuits:provider_list'
default_return_url = 'circuits:provider_list'
#
@ -103,7 +103,7 @@ class CircuitTypeEditView(PermissionRequiredMixin, ObjectEditView):
class CircuitTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'circuits.delete_circuittype'
cls = CircuitType
default_redirect_url = 'circuits:circuittype_list'
default_return_url = 'circuits:circuittype_list'
#
@ -138,7 +138,7 @@ class CircuitEditView(PermissionRequiredMixin, ObjectEditView):
form_class = forms.CircuitForm
fields_initial = ['provider']
template_name = 'circuits/circuit_edit.html'
obj_list_url = 'circuits:circuit_list'
default_return_url = 'circuits:circuit_list'
class CircuitDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -152,7 +152,7 @@ class CircuitBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.CircuitImportForm
table = tables.CircuitTable
template_name = 'circuits/circuit_import.html'
obj_list_url = 'circuits:circuit_list'
default_return_url = 'circuits:circuit_list'
class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -161,14 +161,14 @@ class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.CircuitFilter
form = forms.CircuitBulkEditForm
template_name = 'circuits/circuit_bulk_edit.html'
default_redirect_url = 'circuits:circuit_list'
default_return_url = 'circuits:circuit_list'
class CircuitBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'circuits.delete_circuit'
cls = Circuit
filter = filters.CircuitFilter
default_redirect_url = 'circuits:circuit_list'
default_return_url = 'circuits:circuit_list'
@permission_required('circuits.change_circuittermination')
@ -212,7 +212,7 @@ def circuit_terminations_swap(request, pk):
'form': form,
'panel_class': 'default',
'button_class': 'primary',
'cancel_url': circuit.get_absolute_url(),
'return_url': circuit.get_absolute_url(),
})

View File

@ -71,7 +71,7 @@ class ComponentCreateView(View):
'parent': parent,
'component_type': self.model._meta.verbose_name,
'form': self.form(initial=request.GET),
'cancel_url': parent.get_absolute_url(),
'return_url': parent.get_absolute_url(),
})
def post(self, request, pk):
@ -112,7 +112,7 @@ class ComponentCreateView(View):
'parent': parent,
'component_type': self.model._meta.verbose_name,
'form': form,
'cancel_url': parent.get_absolute_url(),
'return_url': parent.get_absolute_url(),
})
@ -122,6 +122,12 @@ class ComponentEditView(ObjectEditView):
return obj.device.get_absolute_url()
class ComponentDeleteView(ObjectDeleteView):
def get_return_url(self, obj):
return obj.device.get_absolute_url()
#
# Sites
#
@ -163,7 +169,7 @@ class SiteEditView(PermissionRequiredMixin, ObjectEditView):
model = Site
form_class = forms.SiteForm
template_name = 'dcim/site_edit.html'
obj_list_url = 'dcim:site_list'
default_return_url = 'dcim:site_list'
class SiteDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -177,7 +183,7 @@ class SiteBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.SiteImportForm
table = tables.SiteTable
template_name = 'dcim/site_import.html'
obj_list_url = 'dcim:site_list'
default_return_url = 'dcim:site_list'
class SiteBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -186,7 +192,7 @@ class SiteBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.SiteFilter
form = forms.SiteBulkEditForm
template_name = 'dcim/site_bulk_edit.html'
default_redirect_url = 'dcim:site_list'
default_return_url = 'dcim:site_list'
#
@ -215,7 +221,7 @@ class RackGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_rackgroup'
cls = RackGroup
filter = filters.RackGroupFilter
default_redirect_url = 'dcim:rackgroup_list'
default_return_url = 'dcim:rackgroup_list'
#
@ -241,7 +247,7 @@ class RackRoleEditView(PermissionRequiredMixin, ObjectEditView):
class RackRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_rackrole'
cls = RackRole
default_redirect_url = 'dcim:rackrole_list'
default_return_url = 'dcim:rackrole_list'
#
@ -282,7 +288,7 @@ class RackEditView(PermissionRequiredMixin, ObjectEditView):
model = Rack
form_class = forms.RackForm
template_name = 'dcim/rack_edit.html'
obj_list_url = 'dcim:rack_list'
default_return_url = 'dcim:rack_list'
class RackDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -296,7 +302,7 @@ class RackBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.RackImportForm
table = tables.RackImportTable
template_name = 'dcim/rack_import.html'
obj_list_url = 'dcim:rack_list'
default_return_url = 'dcim:rack_list'
class RackBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -305,14 +311,14 @@ class RackBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.RackFilter
form = forms.RackBulkEditForm
template_name = 'dcim/rack_bulk_edit.html'
default_redirect_url = 'dcim:rack_list'
default_return_url = 'dcim:rack_list'
class RackBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_rack'
cls = Rack
filter = filters.RackFilter
default_redirect_url = 'dcim:rack_list'
default_return_url = 'dcim:rack_list'
#
@ -338,7 +344,7 @@ class ManufacturerEditView(PermissionRequiredMixin, ObjectEditView):
class ManufacturerBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_manufacturer'
cls = Manufacturer
default_redirect_url = 'dcim:manufacturer_list'
default_return_url = 'dcim:manufacturer_list'
#
@ -408,7 +414,7 @@ class DeviceTypeEditView(PermissionRequiredMixin, ObjectEditView):
model = DeviceType
form_class = forms.DeviceTypeForm
template_name = 'dcim/devicetype_edit.html'
obj_list_url = 'dcim:devicetype_list'
default_return_url = 'dcim:devicetype_list'
class DeviceTypeDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -423,14 +429,14 @@ class DeviceTypeBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.DeviceTypeFilter
form = forms.DeviceTypeBulkEditForm
template_name = 'dcim/devicetype_bulk_edit.html'
default_redirect_url = 'dcim:devicetype_list'
default_return_url = 'dcim:devicetype_list'
class DeviceTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_devicetype'
cls = DeviceType
filter = filters.DeviceTypeFilter
default_redirect_url = 'dcim:devicetype_list'
default_return_url = 'dcim:devicetype_list'
#
@ -560,7 +566,7 @@ class DeviceRoleEditView(PermissionRequiredMixin, ObjectEditView):
class DeviceRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_devicerole'
cls = DeviceRole
default_redirect_url = 'dcim:devicerole_list'
default_return_url = 'dcim:devicerole_list'
#
@ -586,7 +592,7 @@ class PlatformEditView(PermissionRequiredMixin, ObjectEditView):
class PlatformBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_platform'
cls = Platform
default_redirect_url = 'dcim:platform_list'
default_return_url = 'dcim:platform_list'
#
@ -678,7 +684,7 @@ class DeviceEditView(PermissionRequiredMixin, ObjectEditView):
form_class = forms.DeviceForm
fields_initial = ['site', 'rack', 'position', 'face', 'device_bay']
template_name = 'dcim/device_edit.html'
obj_list_url = 'dcim:device_list'
default_return_url = 'dcim:device_list'
class DeviceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -692,7 +698,7 @@ class DeviceBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.DeviceImportForm
table = tables.DeviceImportTable
template_name = 'dcim/device_import.html'
obj_list_url = 'dcim:device_list'
default_return_url = 'dcim:device_list'
class ChildDeviceBulkImportView(PermissionRequiredMixin, BulkImportView):
@ -700,7 +706,7 @@ class ChildDeviceBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.ChildDeviceImportForm
table = tables.DeviceImportTable
template_name = 'dcim/device_import_child.html'
obj_list_url = 'dcim:device_list'
default_return_url = 'dcim:device_list'
def save_obj(self, obj):
# Inherent rack from parent device
@ -718,14 +724,14 @@ class DeviceBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.DeviceFilter
form = forms.DeviceBulkEditForm
template_name = 'dcim/device_bulk_edit.html'
default_redirect_url = 'dcim:device_list'
default_return_url = 'dcim:device_list'
class DeviceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_device'
cls = Device
filter = filters.DeviceFilter
default_redirect_url = 'dcim:device_list'
default_return_url = 'dcim:device_list'
def device_inventory(request, pk):
@ -790,7 +796,7 @@ def consoleport_connect(request, pk):
return render(request, 'dcim/consoleport_connect.html', {
'consoleport': consoleport,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': consoleport.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': consoleport.device.pk}),
})
@ -819,7 +825,7 @@ def consoleport_disconnect(request, pk):
return render(request, 'dcim/consoleport_disconnect.html', {
'consoleport': consoleport,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': consoleport.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': consoleport.device.pk}),
})
@ -829,7 +835,7 @@ class ConsolePortEditView(PermissionRequiredMixin, ComponentEditView):
form_class = forms.ConsolePortForm
class ConsolePortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
class ConsolePortDeleteView(PermissionRequiredMixin, ComponentDeleteView):
permission_required = 'dcim.delete_consoleport'
model = ConsolePort
@ -886,7 +892,7 @@ def consoleserverport_connect(request, pk):
return render(request, 'dcim/consoleserverport_connect.html', {
'consoleserverport': consoleserverport,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': consoleserverport.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': consoleserverport.device.pk}),
})
@ -916,7 +922,7 @@ def consoleserverport_disconnect(request, pk):
return render(request, 'dcim/consoleserverport_disconnect.html', {
'consoleserverport': consoleserverport,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': consoleserverport.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': consoleserverport.device.pk}),
})
@ -926,7 +932,7 @@ class ConsoleServerPortEditView(PermissionRequiredMixin, ComponentEditView):
form_class = forms.ConsoleServerPortForm
class ConsoleServerPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
class ConsoleServerPortDeleteView(PermissionRequiredMixin, ComponentDeleteView):
permission_required = 'dcim.delete_consoleserverport'
model = ConsoleServerPort
@ -976,7 +982,7 @@ def powerport_connect(request, pk):
return render(request, 'dcim/powerport_connect.html', {
'powerport': powerport,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': powerport.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': powerport.device.pk}),
})
@ -1005,7 +1011,7 @@ def powerport_disconnect(request, pk):
return render(request, 'dcim/powerport_disconnect.html', {
'powerport': powerport,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': powerport.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': powerport.device.pk}),
})
@ -1015,7 +1021,7 @@ class PowerPortEditView(PermissionRequiredMixin, ComponentEditView):
form_class = forms.PowerPortForm
class PowerPortDeleteView(PermissionRequiredMixin, ObjectDeleteView):
class PowerPortDeleteView(PermissionRequiredMixin, ComponentDeleteView):
permission_required = 'dcim.delete_powerport'
model = PowerPort
@ -1072,7 +1078,7 @@ def poweroutlet_connect(request, pk):
return render(request, 'dcim/poweroutlet_connect.html', {
'poweroutlet': poweroutlet,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': poweroutlet.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': poweroutlet.device.pk}),
})
@ -1101,7 +1107,7 @@ def poweroutlet_disconnect(request, pk):
return render(request, 'dcim/poweroutlet_disconnect.html', {
'poweroutlet': poweroutlet,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': poweroutlet.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': poweroutlet.device.pk}),
})
@ -1111,7 +1117,7 @@ class PowerOutletEditView(PermissionRequiredMixin, ComponentEditView):
form_class = forms.PowerOutletForm
class PowerOutletDeleteView(PermissionRequiredMixin, ObjectDeleteView):
class PowerOutletDeleteView(PermissionRequiredMixin, ComponentDeleteView):
permission_required = 'dcim.delete_poweroutlet'
model = PowerOutlet
@ -1141,7 +1147,7 @@ class InterfaceEditView(PermissionRequiredMixin, ComponentEditView):
form_class = forms.InterfaceForm
class InterfaceDeleteView(PermissionRequiredMixin, ObjectDeleteView):
class InterfaceDeleteView(PermissionRequiredMixin, ComponentDeleteView):
permission_required = 'dcim.delete_interface'
model = Interface
@ -1179,7 +1185,7 @@ class DeviceBayEditView(PermissionRequiredMixin, ComponentEditView):
form_class = forms.DeviceBayForm
class DeviceBayDeleteView(PermissionRequiredMixin, ObjectDeleteView):
class DeviceBayDeleteView(PermissionRequiredMixin, ComponentDeleteView):
permission_required = 'dcim.delete_devicebay'
model = DeviceBay
@ -1206,7 +1212,7 @@ def devicebay_populate(request, pk):
return render(request, 'dcim/devicebay_populate.html', {
'device_bay': device_bay,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': device_bay.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': device_bay.device.pk}),
})
@ -1230,7 +1236,7 @@ def devicebay_depopulate(request, pk):
return render(request, 'dcim/devicebay_depopulate.html', {
'device_bay': device_bay,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': device_bay.device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': device_bay.device.pk}),
})
@ -1305,7 +1311,7 @@ class DeviceBulkAddComponentView(View):
'form': form,
'component_name': self.model._meta.verbose_name_plural,
'selected_devices': selected_devices,
'cancel_url': reverse('dcim:device_list'),
'return_url': reverse('dcim:device_list'),
})
@ -1387,7 +1393,7 @@ def interfaceconnection_add(request, pk):
return render(request, 'dcim/interfaceconnection_edit.html', {
'device': device,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': device.pk}),
})
@ -1419,15 +1425,15 @@ def interfaceconnection_delete(request, pk):
# Determine where to direct user upon cancellation
if device_id:
cancel_url = reverse('dcim:device', kwargs={'pk': device_id})
return_url = reverse('dcim:device', kwargs={'pk': device_id})
else:
cancel_url = reverse('dcim:device_list')
return_url = reverse('dcim:device_list')
return render(request, 'dcim/interfaceconnection_delete.html', {
'interfaceconnection': interfaceconnection,
'device_id': device_id,
'form': form,
'cancel_url': cancel_url,
'return_url': return_url,
})
@ -1506,7 +1512,7 @@ def ipaddress_assign(request, pk):
return render(request, 'dcim/ipaddress_assign.html', {
'device': device,
'form': form,
'cancel_url': reverse('dcim:device', kwargs={'pk': device.pk}),
'return_url': reverse('dcim:device', kwargs={'pk': device.pk}),
})
@ -1525,6 +1531,6 @@ class ModuleEditView(PermissionRequiredMixin, ComponentEditView):
return obj
class ModuleDeleteView(PermissionRequiredMixin, ObjectDeleteView):
class ModuleDeleteView(PermissionRequiredMixin, ComponentDeleteView):
permission_required = 'dcim.delete_module'
model = Module

View File

@ -118,7 +118,7 @@ class VRFEditView(PermissionRequiredMixin, ObjectEditView):
model = VRF
form_class = forms.VRFForm
template_name = 'ipam/vrf_edit.html'
obj_list_url = 'ipam:vrf_list'
default_return_url = 'ipam:vrf_list'
class VRFDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -132,7 +132,7 @@ class VRFBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.VRFImportForm
table = tables.VRFTable
template_name = 'ipam/vrf_import.html'
obj_list_url = 'ipam:vrf_list'
default_return_url = 'ipam:vrf_list'
class VRFBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -141,14 +141,14 @@ class VRFBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.VRFFilter
form = forms.VRFBulkEditForm
template_name = 'ipam/vrf_bulk_edit.html'
default_redirect_url = 'ipam:vrf_list'
default_return_url = 'ipam:vrf_list'
class VRFBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'ipam.delete_vrf'
cls = VRF
filter = filters.VRFFilter
default_redirect_url = 'ipam:vrf_list'
default_return_url = 'ipam:vrf_list'
#
@ -253,7 +253,7 @@ class RIRBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'ipam.delete_rir'
cls = RIR
filter = filters.RIRFilter
default_redirect_url = 'ipam:rir_list'
default_return_url = 'ipam:rir_list'
#
@ -311,7 +311,7 @@ class AggregateEditView(PermissionRequiredMixin, ObjectEditView):
model = Aggregate
form_class = forms.AggregateForm
template_name = 'ipam/aggregate_edit.html'
obj_list_url = 'ipam:aggregate_list'
default_return_url = 'ipam:aggregate_list'
class AggregateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -325,7 +325,7 @@ class AggregateBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.AggregateImportForm
table = tables.AggregateTable
template_name = 'ipam/aggregate_import.html'
obj_list_url = 'ipam:aggregate_list'
default_return_url = 'ipam:aggregate_list'
class AggregateBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -334,14 +334,14 @@ class AggregateBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.AggregateFilter
form = forms.AggregateBulkEditForm
template_name = 'ipam/aggregate_bulk_edit.html'
default_redirect_url = 'ipam:aggregate_list'
default_return_url = 'ipam:aggregate_list'
class AggregateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'ipam.delete_aggregate'
cls = Aggregate
filter = filters.AggregateFilter
default_redirect_url = 'ipam:aggregate_list'
default_return_url = 'ipam:aggregate_list'
#
@ -367,7 +367,7 @@ class RoleEditView(PermissionRequiredMixin, ObjectEditView):
class RoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'ipam.delete_role'
cls = Role
default_redirect_url = 'ipam:role_list'
default_return_url = 'ipam:role_list'
#
@ -444,14 +444,14 @@ class PrefixEditView(PermissionRequiredMixin, ObjectEditView):
form_class = forms.PrefixForm
template_name = 'ipam/prefix_edit.html'
fields_initial = ['vrf', 'tenant', 'site', 'prefix', 'vlan']
obj_list_url = 'ipam:prefix_list'
default_return_url = 'ipam:prefix_list'
class PrefixDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'ipam.delete_prefix'
model = Prefix
default_return_url = 'ipam:prefix_list'
template_name = 'ipam/prefix_delete.html'
default_return_url = 'ipam:prefix_list'
class PrefixBulkImportView(PermissionRequiredMixin, BulkImportView):
@ -459,7 +459,7 @@ class PrefixBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.PrefixImportForm
table = tables.PrefixTable
template_name = 'ipam/prefix_import.html'
obj_list_url = 'ipam:prefix_list'
default_return_url = 'ipam:prefix_list'
class PrefixBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -468,14 +468,14 @@ class PrefixBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.PrefixFilter
form = forms.PrefixBulkEditForm
template_name = 'ipam/prefix_bulk_edit.html'
default_redirect_url = 'ipam:prefix_list'
default_return_url = 'ipam:prefix_list'
class PrefixBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'ipam.delete_prefix'
cls = Prefix
filter = filters.PrefixFilter
default_redirect_url = 'ipam:prefix_list'
default_return_url = 'ipam:prefix_list'
def prefix_ipaddresses(request, pk):
@ -569,7 +569,7 @@ def ipaddress_assign(request, pk):
return render(request, 'ipam/ipaddress_assign.html', {
'ipaddress': ipaddress,
'form': form,
'cancel_url': reverse('ipam:ipaddress', kwargs={'pk': ipaddress.pk}),
'return_url': reverse('ipam:ipaddress', kwargs={'pk': ipaddress.pk}),
})
@ -602,7 +602,7 @@ def ipaddress_remove(request, pk):
return render(request, 'ipam/ipaddress_unassign.html', {
'ipaddress': ipaddress,
'form': form,
'cancel_url': reverse('ipam:ipaddress', kwargs={'pk': ipaddress.pk}),
'return_url': reverse('ipam:ipaddress', kwargs={'pk': ipaddress.pk}),
})
@ -612,7 +612,7 @@ class IPAddressEditView(PermissionRequiredMixin, ObjectEditView):
form_class = forms.IPAddressForm
fields_initial = ['address', 'vrf']
template_name = 'ipam/ipaddress_edit.html'
obj_list_url = 'ipam:ipaddress_list'
default_return_url = 'ipam:ipaddress_list'
class IPAddressDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -626,7 +626,7 @@ class IPAddressBulkAddView(PermissionRequiredMixin, BulkAddView):
form = forms.IPAddressBulkAddForm
model = IPAddress
template_name = 'ipam/ipaddress_bulk_add.html'
redirect_url = 'ipam:ipaddress_list'
default_return_url = 'ipam:ipaddress_list'
class IPAddressBulkImportView(PermissionRequiredMixin, BulkImportView):
@ -634,7 +634,7 @@ class IPAddressBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.IPAddressImportForm
table = tables.IPAddressTable
template_name = 'ipam/ipaddress_import.html'
obj_list_url = 'ipam:ipaddress_list'
default_return_url = 'ipam:ipaddress_list'
def save_obj(self, obj):
obj.save()
@ -658,14 +658,14 @@ class IPAddressBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.IPAddressFilter
form = forms.IPAddressBulkEditForm
template_name = 'ipam/ipaddress_bulk_edit.html'
default_redirect_url = 'ipam:ipaddress_list'
default_return_url = 'ipam:ipaddress_list'
class IPAddressBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'ipam.delete_ipaddress'
cls = IPAddress
filter = filters.IPAddressFilter
default_redirect_url = 'ipam:ipaddress_list'
default_return_url = 'ipam:ipaddress_list'
#
@ -694,7 +694,7 @@ class VLANGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'ipam.delete_vlangroup'
cls = VLANGroup
filter = filters.VLANGroupFilter
default_redirect_url = 'ipam:vlangroup_list'
default_return_url = 'ipam:vlangroup_list'
#
@ -727,7 +727,7 @@ class VLANEditView(PermissionRequiredMixin, ObjectEditView):
model = VLAN
form_class = forms.VLANForm
template_name = 'ipam/vlan_edit.html'
obj_list_url = 'ipam:vlan_list'
default_return_url = 'ipam:vlan_list'
class VLANDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -741,7 +741,7 @@ class VLANBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.VLANImportForm
table = tables.VLANTable
template_name = 'ipam/vlan_import.html'
obj_list_url = 'ipam:vlan_list'
default_return_url = 'ipam:vlan_list'
class VLANBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -750,14 +750,14 @@ class VLANBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.VLANFilter
form = forms.VLANBulkEditForm
template_name = 'ipam/vlan_bulk_edit.html'
default_redirect_url = 'ipam:vlan_list'
default_return_url = 'ipam:vlan_list'
class VLANBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'ipam.delete_vlan'
cls = VLAN
filter = filters.VLANFilter
default_redirect_url = 'ipam:vlan_list'
default_return_url = 'ipam:vlan_list'
#

View File

@ -38,7 +38,7 @@ class SecretRoleEditView(PermissionRequiredMixin, ObjectEditView):
class SecretRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'secrets.delete_secretrole'
cls = SecretRole
default_redirect_url = 'secrets:secretrole_list'
default_return_url = 'secrets:secretrole_list'
#
@ -103,7 +103,7 @@ def secret_add(request, pk):
return render(request, 'secrets/secret_edit.html', {
'secret': secret,
'form': form,
'cancel_url': device.get_absolute_url(),
'return_url': device.get_absolute_url(),
})
@ -145,7 +145,7 @@ def secret_edit(request, pk):
return render(request, 'secrets/secret_edit.html', {
'secret': secret,
'form': form,
'cancel_url': reverse('secrets:secret', kwargs={'pk': secret.pk}),
'return_url': reverse('secrets:secret', kwargs={'pk': secret.pk}),
})
@ -195,7 +195,7 @@ def secret_import(request):
return render(request, 'secrets/secret_import.html', {
'form': form,
'cancel_url': reverse('secrets:secret_list'),
'return_url': reverse('secrets:secret_list'),
})
@ -205,11 +205,11 @@ class SecretBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.SecretFilter
form = forms.SecretBulkEditForm
template_name = 'secrets/secret_bulk_edit.html'
default_redirect_url = 'secrets:secret_list'
default_return_url = 'secrets:secret_list'
class SecretBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'secrets.delete_secret'
cls = Secret
filter = filters.SecretFilter
default_redirect_url = 'secrets:secret_list'
default_return_url = 'secrets:secret_list'

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -83,7 +83,7 @@
{% else %}
<button type="submit" name="_create" class="btn btn-primary">Create</button>
{% endif %}
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</form>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -40,7 +40,7 @@
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_update" class="btn btn-primary">Connect</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -40,7 +40,7 @@
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_update" class="btn btn-primary">Connect</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -5,8 +5,8 @@
<h1>Add {{ component_name|title }}</h1>
<form action="." method="post" class="form form-horizontal">
{% csrf_token %}
{% if request.POST.redirect_url %}
<input type="hidden" name="redirect_url" value="{{ request.POST.redirect_url }}" />
{% if request.POST.return_url %}
<input type="hidden" name="return_url" value="{{ request.POST.return_url }}" />
{% endif %}
{% for field in form.hidden_fields %}
{{ field }}
@ -51,7 +51,7 @@
<div class="form-group text-right">
<div class="col-md-12">
<button type="submit" name="_create" class="btn btn-primary">Create</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -34,7 +34,7 @@
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_create" class="btn btn-primary">Create</button>
<button type="submit" name="_addanother" class="btn btn-primary">Create and Add More</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
<h4>CSV Format</h4>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
<h4>CSV Format</h4>

View File

@ -37,7 +37,7 @@
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_update" class="btn btn-primary">Save</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -33,7 +33,7 @@
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_update" class="btn btn-primary">Save</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -50,7 +50,7 @@
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
</button>
{% else %}
<a href="{% url 'dcim:consoleport_delete' pk=cp.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
<a href="{% url 'dcim:consoleport_delete' pk=cp.pk %}" class="btn btn-danger btn-xs">
<i class="glyphicon glyphicon-trash" aria-hidden="true" title="Delete port"></i>
</a>
{% endif %}

View File

@ -49,7 +49,7 @@
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
</button>
{% else %}
<a href="{% url 'dcim:consoleserverport_delete' pk=csp.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
<a href="{% url 'dcim:consoleserverport_delete' pk=csp.pk %}" class="btn btn-danger btn-xs">
<i class="glyphicon glyphicon-trash" aria-hidden="true" title="Delete port"></i>
</a>
{% endif %}

View File

@ -40,7 +40,7 @@
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
</button>
{% else %}
<a href="{% url 'dcim:devicebay_delete' pk=devicebay.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
<a href="{% url 'dcim:devicebay_delete' pk=devicebay.pk %}" class="btn btn-danger btn-xs">
<i class="glyphicon glyphicon-trash" aria-hidden="true" title="Delete device bay"></i>
</a>
{% endif %}

View File

@ -85,7 +85,7 @@
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
</button>
{% else %}
<a href="{% url 'dcim:interface_delete' pk=iface.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs" title="Delete interface">
<a href="{% url 'dcim:interface_delete' pk=iface.pk %}" class="btn btn-danger btn-xs" title="Delete interface">
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
</a>
{% endif %}

View File

@ -49,7 +49,7 @@
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
</button>
{% else %}
<a href="{% url 'dcim:poweroutlet_delete' pk=po.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
<a href="{% url 'dcim:poweroutlet_delete' pk=po.pk %}" class="btn btn-danger btn-xs">
<i class="glyphicon glyphicon-trash" aria-hidden="true" title="Delete outlet"></i>
</a>
{% endif %}

View File

@ -50,7 +50,7 @@
<i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
</button>
{% else %}
<a href="{% url 'dcim:powerport_delete' pk=pp.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
<a href="{% url 'dcim:powerport_delete' pk=pp.pk %}" class="btn btn-danger btn-xs">
<i class="glyphicon glyphicon-trash" aria-hidden="true" title="Delete port"></i>
</a>
{% endif %}

View File

@ -86,7 +86,7 @@
<div class="form-group">
<button type="submit" name="_create" class="btn btn-primary">Connect</button>
<button type="submit" name="_addanother" class="btn btn-primary">Connect and Add Another</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</form>

View File

@ -53,7 +53,7 @@
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_create" class="btn btn-primary">Create</button>
<button type="submit" name="_addanother" class="btn btn-primary">Create and Add More</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -40,7 +40,7 @@
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_update" class="btn btn-primary">Connect</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -40,7 +40,7 @@
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_update" class="btn btn-primary">Connect</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -59,7 +59,7 @@
<div class="form-group">
<div class="col-md-9 col-md-offset-3">
<button type="submit" name="_assign" class="btn btn-primary">Assign</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -59,7 +59,7 @@
{% else %}
<button type="submit" name="_create" class="btn btn-primary">Create</button>
<button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
{% endif %}
</div>
</div>

View File

@ -22,7 +22,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -13,7 +13,7 @@
{% render_form form %}
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
<a href="{% url obj_list_url %}" class="btn btn-default">Cancel</a>
<a href="{% url return_url %}" class="btn btn-default">Cancel</a>
</div>
</form>
</div>

View File

@ -5,8 +5,8 @@
<h1>{% block title %}{% endblock %}</h1>
<form action="." method="post" class="form form-horizontal">
{% csrf_token %}
{% if request.POST.redirect_url %}
<input type="hidden" name="redirect_url" value="{{ request.POST.redirect_url }}" />
{% if request.POST.return_url %}
<input type="hidden" name="return_url" value="{{ request.POST.return_url }}" />
{% endif %}
{% for field in form.hidden_fields %}
{{ field }}
@ -44,7 +44,7 @@
<div class="form-group text-right">
<div class="col-md-12">
<button type="submit" name="_apply" class="btn btn-primary">Apply</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -23,7 +23,7 @@
</div>
<div class="text-right">
<button type="submit" name="_confirm" class="btn btn-{{ button_class|default:"danger" }}">Confirm</button>
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</div>

View File

@ -37,7 +37,7 @@
<button type="submit" name="_create" class="btn btn-primary">Create</button>
<button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
{% endif %}
<a href="{{ cancel_url }}" class="btn btn-default">Cancel</a>
<a href="{{ return_url }}" class="btn btn-default">Cancel</a>
</div>
</div>
</form>

View File

@ -3,7 +3,7 @@
{% if table.model|user_can_change:request.user or table.model|user_can_delete:request.user %}
<form method="post" class="form form-horizontal">
{% csrf_token %}
<input type="hidden" name="redirect_url" value="{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" />
<input type="hidden" name="return_url" value="{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" />
{% if table.paginator.num_pages > 1 %}
<div id="select_all_box" class="hidden panel panel-default">
<div class="panel-body">

View File

@ -37,7 +37,7 @@ class TenantGroupEditView(PermissionRequiredMixin, ObjectEditView):
class TenantGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'tenancy.delete_tenantgroup'
cls = TenantGroup
default_redirect_url = 'tenancy:tenantgroup_list'
default_return_url = 'tenancy:tenantgroup_list'
#
@ -85,7 +85,7 @@ class TenantEditView(PermissionRequiredMixin, ObjectEditView):
form_class = forms.TenantForm
fields_initial = ['group']
template_name = 'tenancy/tenant_edit.html'
obj_list_url = 'tenancy:tenant_list'
default_return_url = 'tenancy:tenant_list'
class TenantDeleteView(PermissionRequiredMixin, ObjectDeleteView):
@ -99,7 +99,7 @@ class TenantBulkImportView(PermissionRequiredMixin, BulkImportView):
form = forms.TenantImportForm
table = tables.TenantTable
template_name = 'tenancy/tenant_import.html'
obj_list_url = 'tenancy:tenant_list'
default_return_url = 'tenancy:tenant_list'
class TenantBulkEditView(PermissionRequiredMixin, BulkEditView):
@ -108,11 +108,11 @@ class TenantBulkEditView(PermissionRequiredMixin, BulkEditView):
filter = filters.TenantFilter
form = forms.TenantBulkEditForm
template_name = 'tenancy/tenant_bulk_edit.html'
default_redirect_url = 'tenancy:tenant_list'
default_return_url = 'tenancy:tenant_list'
class TenantBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'tenancy.delete_tenant'
cls = Tenant
filter = filters.TenantFilter
default_redirect_url = 'tenancy:tenant_list'
default_return_url = 'tenancy:tenant_list'

View File

@ -126,13 +126,13 @@ class ObjectEditView(View):
form_class: The form used to create or edit the object
fields_initial: A set of fields that will be prepopulated in the form from the request parameters
template_name: The name of the template
obj_list_url: The name of the URL used to display a list of this object type
default_return_url: The name of the URL used to display a list of this object type
"""
model = None
form_class = None
fields_initial = []
template_name = 'utilities/obj_edit.html'
obj_list_url = None
default_return_url = 'home'
def get_object(self, kwargs):
# Look up object by slug or PK. Return None if neither was provided.
@ -151,9 +151,7 @@ class ObjectEditView(View):
# Determine where to redirect the user after updating an object (or aborting an update).
if obj.pk and hasattr(obj, 'get_absolute_url'):
return obj.get_absolute_url()
if self.obj_list_url is not None:
return reverse(self.obj_list_url)
return reverse('home')
return reverse(self.default_return_url)
def get(self, request, *args, **kwargs):
@ -166,7 +164,7 @@ class ObjectEditView(View):
'obj': obj,
'obj_type': self.model._meta.verbose_name,
'form': form,
'cancel_url': self.get_return_url(obj),
'return_url': self.get_return_url(obj),
})
def post(self, request, *args, **kwargs):
@ -203,7 +201,7 @@ class ObjectEditView(View):
'obj': obj,
'obj_type': self.model._meta.verbose_name,
'form': form,
'cancel_url': self.get_return_url(obj),
'return_url': self.get_return_url(obj),
})
@ -226,10 +224,10 @@ class ObjectDeleteView(View):
else:
return get_object_or_404(self.model, pk=kwargs['pk'])
def get_cancel_url(self, obj):
def get_return_url(self, obj):
if hasattr(obj, 'get_absolute_url'):
return obj.get_absolute_url()
return reverse('home')
return reverse(self.default_return_url)
def get(self, request, **kwargs):
@ -243,7 +241,7 @@ class ObjectDeleteView(View):
'obj': obj,
'form': form,
'obj_type': self.model._meta.verbose_name,
'cancel_url': request.GET.get('return_url') or self.get_cancel_url(obj),
'return_url': request.GET.get('return_url') or self.get_return_url(obj),
})
def post(self, request, **kwargs):
@ -272,7 +270,7 @@ class ObjectDeleteView(View):
'obj': obj,
'form': form,
'obj_type': self.model._meta.verbose_name,
'cancel_url': request.GET.get('return_url') or self.get_cancel_url(obj),
'return_url': request.GET.get('return_url') or self.get_return_url(obj),
})
@ -283,12 +281,12 @@ class BulkAddView(View):
form: Form class
model: The model of the objects being created
template_name: The name of the template
redirect_url: Name of the URL to which the user is redirected after creating the objects
default_return_url: Name of the URL to which the user is redirected after creating the objects
"""
form = None
model = None
template_name = None
redirect_url = None
default_return_url = 'home'
def get(self, request):
@ -297,7 +295,7 @@ class BulkAddView(View):
return render(request, self.template_name, {
'obj_type': self.model._meta.verbose_name,
'form': form,
'cancel_url': reverse(self.redirect_url),
'return_url': reverse(self.default_return_url),
})
def post(self, request):
@ -328,12 +326,12 @@ class BulkAddView(View):
messages.success(request, u"Added {} {}.".format(len(new_objs), self.model._meta.verbose_name_plural))
if '_addanother' in request.POST:
return redirect(request.path)
return redirect(self.redirect_url)
return redirect(self.default_return_url)
return render(request, self.template_name, {
'form': form,
'obj_type': self.model._meta.verbose_name,
'cancel_url': reverse(self.redirect_url),
'return_url': reverse(self.default_return_url),
})
@ -344,18 +342,18 @@ class BulkImportView(View):
form: Form class
table: The django-tables2 Table used to render the list of imported objects
template_name: The name of the template
obj_list_url: The name of the URL to use for the cancel button
default_return_url: The name of the URL to use for the cancel button
"""
form = None
table = None
template_name = None
obj_list_url = None
default_return_url = None
def get(self, request):
return render(request, self.template_name, {
'form': self.form(),
'obj_list_url': self.obj_list_url,
'return_url': self.default_return_url,
})
def post(self, request):
@ -384,7 +382,7 @@ class BulkImportView(View):
return render(request, self.template_name, {
'form': form,
'obj_list_url': self.obj_list_url,
'return_url': self.default_return_url,
})
def save_obj(self, obj):
@ -400,17 +398,18 @@ class BulkEditView(View):
filter: FilterSet to apply when deleting by QuerySet
form: The form class used to edit objects in bulk
template_name: The name of the template
default_redirect_url: Name of the URL to which the user is redirected after editing the objects
default_return_url: Name of the URL to which the user is redirected after editing the objects (can be overriden by
POSTing return_url)
"""
cls = None
parent_cls = None
filter = None
form = None
template_name = None
default_redirect_url = None
default_return_url = 'home'
def get(self):
return redirect(self.default_redirect_url)
return redirect(self.default_return_url)
def post(self, request, **kwargs):
@ -421,15 +420,13 @@ class BulkEditView(View):
parent_obj = None
# Determine URL to redirect users upon modification of objects
posted_redirect_url = request.POST.get('redirect_url')
if posted_redirect_url and is_safe_url(url=posted_redirect_url, host=request.get_host()):
redirect_url = posted_redirect_url
posted_return_url = request.POST.get('return_url')
if posted_return_url and is_safe_url(url=posted_return_url, host=request.get_host()):
return_url = posted_return_url
elif parent_obj:
redirect_url = parent_obj.get_absolute_url()
elif self.default_redirect_url:
redirect_url = reverse(self.default_redirect_url)
return_url = parent_obj.get_absolute_url()
else:
raise ImproperlyConfigured('No redirect URL has been provided.')
return_url = reverse(self.default_return_url)
# Are we editing *all* objects in the queryset or just a selected subset?
if request.POST.get('_all') and self.filter is not None:
@ -467,7 +464,7 @@ class BulkEditView(View):
msg = u'Updated {} {}'.format(updated_count, self.cls._meta.verbose_name_plural)
messages.success(self.request, msg)
UserAction.objects.log_bulk_edit(request.user, ContentType.objects.get_for_model(self.cls), msg)
return redirect(redirect_url)
return redirect(return_url)
else:
form = self.form(self.cls, initial={'pk': pk_list})
@ -475,12 +472,12 @@ class BulkEditView(View):
selected_objects = self.cls.objects.filter(pk__in=pk_list)
if not selected_objects:
messages.warning(request, u"No {} were selected.".format(self.cls._meta.verbose_name_plural))
return redirect(redirect_url)
return redirect(return_url)
return render(request, self.template_name, {
'form': form,
'selected_objects': selected_objects,
'cancel_url': redirect_url,
'return_url': return_url,
})
def update_custom_fields(self, pk_list, form, fields, nullified_fields):
@ -540,14 +537,15 @@ class BulkDeleteView(View):
filter: FilterSet to apply when deleting by QuerySet
form: The form class used to delete objects in bulk
template_name: The name of the template
default_redirect_url: Name of the URL to which the user is redirected after deleting the objects
default_return_url: Name of the URL to which the user is redirected after deleting the objects (can be overriden by
POSTing return_url)
"""
cls = None
parent_cls = None
filter = None
form = None
template_name = 'utilities/confirm_bulk_delete.html'
default_redirect_url = None
default_return_url = 'home'
def post(self, request, **kwargs):
@ -558,15 +556,13 @@ class BulkDeleteView(View):
parent_obj = None
# Determine URL to redirect users upon deletion of objects
posted_redirect_url = request.POST.get('redirect_url')
if posted_redirect_url and is_safe_url(url=posted_redirect_url, host=request.get_host()):
redirect_url = posted_redirect_url
posted_return_url = request.POST.get('return_url')
if posted_return_url and is_safe_url(url=posted_return_url, host=request.get_host()):
return_url = posted_return_url
elif parent_obj:
redirect_url = parent_obj.get_absolute_url()
elif self.default_redirect_url:
redirect_url = reverse(self.default_redirect_url)
return_url = parent_obj.get_absolute_url()
else:
raise ImproperlyConfigured('No redirect URL has been provided.')
return_url = reverse(self.default_return_url)
# Are we deleting *all* objects in the queryset or just a selected subset?
if request.POST.get('_all') and self.filter is not None:
@ -586,12 +582,12 @@ class BulkDeleteView(View):
deleted_count = queryset.delete()[1][self.cls._meta.label]
except ProtectedError as e:
handle_protectederror(list(queryset), request, e)
return redirect(redirect_url)
return redirect(return_url)
msg = u'Deleted {} {}'.format(deleted_count, self.cls._meta.verbose_name_plural)
messages.success(request, msg)
UserAction.objects.log_bulk_delete(request.user, ContentType.objects.get_for_model(self.cls), msg)
return redirect(redirect_url)
return redirect(return_url)
else:
form = form_cls(initial={'pk': pk_list})
@ -599,14 +595,14 @@ class BulkDeleteView(View):
selected_objects = self.cls.objects.filter(pk__in=pk_list)
if not selected_objects:
messages.warning(request, u"No {} were selected for deletion.".format(self.cls._meta.verbose_name_plural))
return redirect(redirect_url)
return redirect(return_url)
return render(request, self.template_name, {
'form': form,
'parent_obj': parent_obj,
'obj_type_plural': self.cls._meta.verbose_name_plural,
'selected_objects': selected_objects,
'cancel_url': redirect_url,
'return_url': return_url,
})
def get_form(self):