Browse Source

#353: Added bulk editing for InterfaceTemplates

Jeremy Stretch 8 years ago
parent
commit
c09cb5df3d

+ 9 - 1
netbox/dcim/forms.py

@@ -316,6 +316,14 @@ class InterfaceTemplateForm(forms.ModelForm, BootstrapMixin):
         fields = ['name_pattern', 'form_factor', 'mgmt_only']
 
 
+class InterfaceTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+    pk = forms.ModelMultipleChoiceField(queryset=InterfaceTemplate.objects.all(), widget=forms.MultipleHiddenInput)
+    form_factor = forms.ChoiceField(choices=add_blank_choice(IFACE_FF_CHOICES), required=False)
+
+    class Meta:
+        nullable_fields = []
+
+
 class DeviceBayTemplateForm(forms.ModelForm, BootstrapMixin):
     name_pattern = ExpandableNameField(label='Name')
 
@@ -1008,7 +1016,7 @@ class InterfaceBulkCreateForm(InterfaceCreateForm, BootstrapMixin):
     pk = forms.ModelMultipleChoiceField(queryset=Device.objects.all(), widget=forms.MultipleHiddenInput)
 
 
-class InterfaceBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm):
+class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm):
     pk = forms.ModelMultipleChoiceField(queryset=Interface.objects.all(), widget=forms.MultipleHiddenInput)
     form_factor = forms.ChoiceField(choices=add_blank_choice(IFACE_FF_CHOICES), required=False)
     description = forms.CharField(max_length=100, required=False)

+ 1 - 0
netbox/dcim/urls.py

@@ -71,6 +71,7 @@ urlpatterns = [
 
     # Interface templates
     url(r'^device-types/(?P<pk>\d+)/interfaces/add/$', views.InterfaceTemplateAddView.as_view(), name='devicetype_add_interface'),
+    url(r'^device-types/(?P<pk>\d+)/interfaces/edit/$', views.InterfaceTemplateBulkEditView.as_view(), name='devicetype_bulkedit_interface'),
     url(r'^device-types/(?P<pk>\d+)/interfaces/delete/$', views.InterfaceTemplateBulkDeleteView.as_view(), name='devicetype_delete_interface'),
 
     # Device bay templates

+ 8 - 0
netbox/dcim/views.py

@@ -457,6 +457,14 @@ class InterfaceTemplateAddView(ComponentTemplateCreateView):
     form = forms.InterfaceTemplateForm
 
 
+class InterfaceTemplateBulkEditView(PermissionRequiredMixin, BulkEditView):
+    permission_required = 'dcim.change_interfacetemplate'
+    cls = InterfaceTemplate
+    parent_cls = DeviceType
+    form = forms.InterfaceTemplateBulkEditForm
+    template_name = 'dcim/interfacetemplate_bulk_edit.html'
+
+
 class InterfaceTemplateBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_interfacetemplate'
     cls = InterfaceTemplate

+ 1 - 1
netbox/templates/dcim/device.html

@@ -382,7 +382,7 @@
                     <div class="panel-footer">
                         {% if interfaces and perms.dcim.change_interface %}
                             <button type="submit" name="_edit" formaction="{% url 'dcim:interface_bulk_edit' pk=device.pk %}" class="btn btn-warning btn-xs">
-                                <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Edit selected
+                                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit selected
                             </button>
                         {% endif %}
                         {% if interfaces and perms.dcim.delete_interface %}

+ 2 - 2
netbox/templates/dcim/devicetype.html

@@ -143,14 +143,14 @@
         </div>
         {% include 'dcim/inc/devicetype_component_table.html' with table=consoleport_table title='Console Ports' add_url='dcim:devicetype_add_consoleport' delete_url='dcim:devicetype_delete_consoleport' %}
         {% include 'dcim/inc/devicetype_component_table.html' with table=powerport_table title='Power Ports' add_url='dcim:devicetype_add_powerport' delete_url='dcim:devicetype_delete_powerport' %}
-        {% include 'dcim/inc/devicetype_component_table.html' with table=mgmt_interface_table title='Management Interfaces' add_url='dcim:devicetype_add_interface' add_url_extra='?mgmt_only=1' delete_url='dcim:devicetype_delete_interface' %}
+        {% include 'dcim/inc/devicetype_component_table.html' with table=mgmt_interface_table title='Management Interfaces' add_url='dcim:devicetype_add_interface' add_url_extra='?mgmt_only=1' edit_url='dcim:devicetype_bulkedit_interface' delete_url='dcim:devicetype_delete_interface' %}
     </div>
     <div class="col-md-6">
         {% if devicetype.is_parent_device %}
             {% include 'dcim/inc/devicetype_component_table.html' with table=devicebay_table title='Device Bays' add_url='dcim:devicetype_add_devicebay' delete_url='dcim:devicetype_delete_devicebay' %}
         {% endif %}
         {% if devicetype.is_network_device %}
-            {% include 'dcim/inc/devicetype_component_table.html' with table=interface_table title='Interfaces' add_url='dcim:devicetype_add_interface' delete_url='dcim:devicetype_delete_interface' %}
+            {% include 'dcim/inc/devicetype_component_table.html' with table=interface_table title='Interfaces' add_url='dcim:devicetype_add_interface' edit_url='dcim:devicetype_bulkedit_interface' delete_url='dcim:devicetype_delete_interface' %}
         {% endif %}
         {% if devicetype.is_console_server %}
             {% include 'dcim/inc/devicetype_component_table.html' with table=consoleserverport_table title='Console Server Ports' add_url='dcim:devicetype_add_consoleserverport' delete_url='dcim:devicetype_delete_consoleserverport' %}

+ 11 - 4
netbox/templates/dcim/inc/devicetype_component_table.html

@@ -1,6 +1,6 @@
 {% load render_table from django_tables2 %}
 {% if perms.dcim.change_devicetype %}
-    <form method="post" action="{% url delete_url pk=devicetype.pk %}">
+    <form method="post">
         {% csrf_token %}
         <div class="panel panel-default">
             <div class="panel-heading">
@@ -17,9 +17,16 @@
             {% render_table table 'table.html' %}
             <div class="panel-footer">
                 {% if table.rows %}
-                    <button type="submit" class="btn btn-xs btn-danger">
-                        <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete Selected
-                    </button>
+                    {% if edit_url %}
+                        <button type="submit" name="_edit" formaction="{% url edit_url pk=devicetype.pk %}" class="btn btn-xs btn-warning">
+                            <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit Selected
+                        </button>
+                    {% endif %}
+                    {% if delete_url %}
+                        <button type="submit" name="_delete" formaction="{% url delete_url pk=devicetype.pk %}" class="btn btn-xs btn-danger">
+                            <span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete Selected
+                        </button>
+                    {% endif %}
                 {% endif %}
                 <div class="pull-right">
                     <a href="{% url add_url pk=devicetype.pk %}{{ add_url_extra }}" class="btn btn-primary btn-xs">

+ 25 - 0
netbox/templates/dcim/interfacetemplate_bulk_edit.html

@@ -0,0 +1,25 @@
+{% extends 'utilities/bulk_edit_form.html' %}
+{% load form_helpers %}
+
+{% block title %}Interface Template Bulk Edit{% endblock %}
+
+{% block selected_objects_table %}
+    <tr>
+        <th>Name</th>
+        <th>Form Factor</th>
+        <th>Management</th>
+    </tr>
+    {% for iface in selected_objects %}
+        <tr>
+            <td>{{ iface.name }}</td>
+            <td>{{ iface.get_form_factor_display }}</td>
+            <td>
+                {% if iface.mgmt_only %}
+                    <i class="glyphicon glyphicon-ok text-success" title="Yes"></i>
+                {% else %}
+                    <i class="glyphicon glyphicon-remove text-danger" title="No"></i>
+                {% endif %}
+            </td>
+        </tr>
+    {% endfor %}
+{% endblock %}