diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index e1fa470e1..473042542 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -25,13 +25,13 @@ urlpatterns = [ # Racks url(r'^racks/$', views.RackListView.as_view(), name='rack_list'), - url(r'^racks/add/$', views.rack_add, name='rack_add'), + url(r'^racks/add/$', views.RackAddView.as_view(), name='rack_add'), url(r'^racks/import/$', views.RackBulkImportView.as_view(), name='rack_import'), url(r'^racks/edit/$', views.RackBulkEditView.as_view(), name='rack_bulk_edit'), url(r'^racks/delete/$', views.RackBulkDeleteView.as_view(), name='rack_bulk_delete'), url(r'^racks/(?P\d+)/$', views.rack, name='rack'), - url(r'^racks/(?P\d+)/edit/$', views.rack_edit, name='rack_edit'), - url(r'^racks/(?P\d+)/delete/$', views.rack_delete, name='rack_delete'), + url(r'^racks/(?P\d+)/edit/$', views.RackEditView.as_view(), name='rack_edit'), + url(r'^racks/(?P\d+)/delete/$', views.RackDeleteView.as_view(), name='rack_delete'), # Device types url(r'^device-types/$', views.DeviceTypeListView.as_view(), name='devicetype_list'), diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index abed5d628..f69ce8b9d 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -198,78 +198,100 @@ def rack(request, pk): }) -@permission_required('dcim.add_rack') -def rack_add(request): - - if request.method == 'POST': - form = RackForm(request.POST) - if form.is_valid(): - rack = form.save() - messages.success(request, "Added new rack to {}: {}".format(rack.site.name, rack)) - if '_addanother' in request.POST: - base_url = reverse('dcim:rack_add') - params = urlencode({ - 'site': rack.site.pk, - }) - return HttpResponseRedirect('{}?{}'.format(base_url, params)) - else: - return redirect('dcim:rack', pk=rack.pk) - - else: - form = RackForm() - - return render(request, 'dcim/rack_edit.html', { - 'form': form, - 'cancel_url': reverse('dcim:rack_list'), - }) +class RackAddView(PermissionRequiredMixin, ObjectAddView): + permission_required = 'dcim.add_rack' + model = Rack + form_class = RackForm + template_name = 'dcim/rack_edit.html' + cancel_url = 'dcim:rack_list' -@permission_required('dcim.change_rack') -def rack_edit(request, pk): - - rack = get_object_or_404(Rack, pk=pk) - - if request.method == 'POST': - form = RackForm(request.POST, instance=rack) - if form.is_valid(): - rack = form.save() - messages.success(request, "Modified rack {0}".format(rack.name)) - return redirect('dcim:rack', pk=rack.pk) - - else: - form = RackForm(instance=rack) - - return render(request, 'dcim/rack_edit.html', { - 'rack': rack, - 'form': form, - 'cancel_url': reverse('dcim:rack', kwargs={'pk': rack.pk}), - }) +# @permission_required('dcim.add_rack') +# def rack_add(request): +# +# if request.method == 'POST': +# form = RackForm(request.POST) +# if form.is_valid(): +# rack = form.save() +# messages.success(request, "Added new rack to {}: {}".format(rack.site.name, rack)) +# if '_addanother' in request.POST: +# base_url = reverse('dcim:rack_add') +# params = urlencode({ +# 'site': rack.site.pk, +# }) +# return HttpResponseRedirect('{}?{}'.format(base_url, params)) +# else: +# return redirect('dcim:rack', pk=rack.pk) +# +# else: +# form = RackForm() +# +# return render(request, 'dcim/rack_edit.html', { +# 'form': form, +# 'cancel_url': reverse('dcim:rack_list'), +# }) -@permission_required('dcim.delete_rack') -def rack_delete(request, pk): +# @permission_required('dcim.change_rack') +# def rack_edit(request, pk): +# +# rack = get_object_or_404(Rack, pk=pk) +# +# if request.method == 'POST': +# form = RackForm(request.POST, instance=rack) +# if form.is_valid(): +# rack = form.save() +# messages.success(request, "Modified rack {0}".format(rack.name)) +# return redirect('dcim:rack', pk=rack.pk) +# +# else: +# form = RackForm(instance=rack) +# +# return render(request, 'dcim/rack_edit.html', { +# 'rack': rack, +# 'form': form, +# 'cancel_url': reverse('dcim:rack', kwargs={'pk': rack.pk}), +# }) - rack = get_object_or_404(Rack, pk=pk) - if request.method == 'POST': - form = ConfirmationForm(request.POST) - if form.is_valid(): - try: - rack.delete() - messages.success(request, "Rack {0} has been deleted".format(rack)) - return redirect('dcim:rack_list') - except ProtectedError, e: - handle_protectederror(rack, request, e) - return redirect('dcim:rack', pk=rack.pk) +class RackEditView(PermissionRequiredMixin, ObjectEditView): + permission_required = 'dcim.change_rack' + model = Rack + form_class = RackForm + template_name = 'dcim/rack_edit.html' - else: - form = ConfirmationForm() - return render(request, 'dcim/rack_delete.html', { - 'rack': rack, - 'form': form, - 'cancel_url': reverse('dcim:rack', kwargs={'pk': rack.pk}), - }) +# @permission_required('dcim.delete_rack') +# def rack_delete(request, pk): +# +# rack = get_object_or_404(Rack, pk=pk) +# +# if request.method == 'POST': +# form = ConfirmationForm(request.POST) +# if form.is_valid(): +# try: +# rack.delete() +# messages.success(request, "Rack {0} has been deleted".format(rack)) +# return redirect('dcim:rack_list') +# except ProtectedError, e: +# handle_protectederror(rack, request, e) +# return redirect('dcim:rack', pk=rack.pk) +# +# else: +# form = ConfirmationForm() +# +# return render(request, 'dcim/rack_delete.html', { +# 'rack': rack, +# 'form': form, +# 'cancel_url': reverse('dcim:rack', kwargs={'pk': rack.pk}), +# }) + + +class RackDeleteView(PermissionRequiredMixin, ObjectDeleteView): + permission_required = 'dcim.delete_rack' + model = Rack + template_name = 'dcim/rack_delete.html' + redirect_url = 'dcim:rack_list' class RackBulkImportView(PermissionRequiredMixin, BulkImportView): diff --git a/netbox/templates/dcim/rack_delete.html b/netbox/templates/dcim/rack_delete.html index 39dc6c05e..38b5f0719 100644 --- a/netbox/templates/dcim/rack_delete.html +++ b/netbox/templates/dcim/rack_delete.html @@ -1,8 +1,8 @@ {% extends 'utilities/confirmation_form.html' %} {% load form_helpers %} -{% block title %}Delete rack {{ rack }}?{% endblock %} +{% block title %}Delete rack {{ obj }}?{% endblock %} {% block message %} -

Are you sure you want to delete rack {{ rack }} from {{ rack.site }}?

+

Are you sure you want to delete rack {{ obj }} from {{ obj.site }}?

{% endblock %} diff --git a/netbox/templates/dcim/rack_edit.html b/netbox/templates/dcim/rack_edit.html index 2c400ee85..d988cb753 100644 --- a/netbox/templates/dcim/rack_edit.html +++ b/netbox/templates/dcim/rack_edit.html @@ -1,11 +1,11 @@ {% extends '_base.html' %} {% load form_helpers %} -{% block title %}{% if rack %}Editing rack {{ rack }}{% else %}Add a rack{% endif %}{% endblock %} +{% block title %}{% if obj %}Editing rack {{ obj }}{% else %}Add a rack{% endif %}{% endblock %} {% block content %} -{% if rack %} -

Rack {{ rack }}

+{% if obj %} +

Rack {{ obj }}

{% else %}

Add a Rack

{% endif %} @@ -47,9 +47,9 @@
- {% if rack %} + {% if obj %} - Cancel + Cancel {% else %}