Parcourir la source

Converted DCIM rack add/edit/delete views to CBVs

Jeremy Stretch il y a 9 ans
Parent
commit
c6c1ea7466

+ 3 - 3
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<pk>\d+)/$', views.rack, name='rack'),
-    url(r'^racks/(?P<pk>\d+)/edit/$', views.rack_edit, name='rack_edit'),
-    url(r'^racks/(?P<pk>\d+)/delete/$', views.rack_delete, name='rack_delete'),
+    url(r'^racks/(?P<pk>\d+)/edit/$', views.RackEditView.as_view(), name='rack_edit'),
+    url(r'^racks/(?P<pk>\d+)/delete/$', views.RackDeleteView.as_view(), name='rack_delete'),
 
     # Device types
     url(r'^device-types/$', views.DeviceTypeListView.as_view(), name='devicetype_list'),

+ 84 - 62
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'),
-    })
-
-
-@permission_required('dcim.change_rack')
-def rack_edit(request, pk):
+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'
 
-    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)
+# @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'),
+#     })
 
-    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.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.delete_rack')
-def rack_delete(request, pk):
+class RackEditView(PermissionRequiredMixin, ObjectEditView):
+    permission_required = 'dcim.change_rack'
+    model = Rack
+    form_class = RackForm
+    template_name = 'dcim/rack_edit.html'
 
-    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)
+# @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}),
+#     })
 
-    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):

+ 2 - 2
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 %}
-    <p>Are you sure you want to delete rack {{ rack }} from {{ rack.site }}?</p>
+    <p>Are you sure you want to delete rack {{ obj }} from {{ obj.site }}?</p>
 {% endblock %}

+ 5 - 5
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 %}
-	<h1>Rack {{ rack }}</h1>
+{% if obj %}
+	<h1>Rack {{ obj }}</h1>
 {% else %}
 	<h1>Add a Rack</h1>
 {% endif %}
@@ -47,9 +47,9 @@
     </div>
     <div class="row">
         <div class="col-md-12 text-right">
-            {% if rack %}
+            {% if obj %}
                 <button type="submit" name="_update" class="btn btn-primary">Update</button>
-                <a href="{% url 'dcim:rack' pk=rack.pk %}" class="btn btn-default">Cancel</a>
+                <a href="{% url 'dcim:rack' pk=obj.pk %}" class="btn btn-default">Cancel</a>
             {% 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>