From c09cb5df3d4b63d03a2bd59491bef511d4cf1f38 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 19 Oct 2016 12:15:54 -0400 Subject: [PATCH] #353: Added bulk editing for InterfaceTemplates --- netbox/dcim/forms.py | 10 +++++++- netbox/dcim/urls.py | 1 + netbox/dcim/views.py | 8 ++++++ netbox/templates/dcim/device.html | 2 +- netbox/templates/dcim/devicetype.html | 4 +-- .../dcim/inc/devicetype_component_table.html | 15 ++++++++--- .../dcim/interfacetemplate_bulk_edit.html | 25 +++++++++++++++++++ 7 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 netbox/templates/dcim/interfacetemplate_bulk_edit.html diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 3908b35af..3c6ac7e43 100644 --- a/netbox/dcim/forms.py +++ b/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) diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index f5c5f69c0..b5b960f57 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -71,6 +71,7 @@ urlpatterns = [ # Interface templates url(r'^device-types/(?P\d+)/interfaces/add/$', views.InterfaceTemplateAddView.as_view(), name='devicetype_add_interface'), + url(r'^device-types/(?P\d+)/interfaces/edit/$', views.InterfaceTemplateBulkEditView.as_view(), name='devicetype_bulkedit_interface'), url(r'^device-types/(?P\d+)/interfaces/delete/$', views.InterfaceTemplateBulkDeleteView.as_view(), name='devicetype_delete_interface'), # Device bay templates diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 112734c22..b68a1dba0 100644 --- a/netbox/dcim/views.py +++ b/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 diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index 98f43be19..345944370 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -382,7 +382,7 @@ {% 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' %}
{% 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' %} diff --git a/netbox/templates/dcim/inc/devicetype_component_table.html b/netbox/templates/dcim/inc/devicetype_component_table.html index 6cdb1562b..c71c5b4da 100644 --- a/netbox/templates/dcim/inc/devicetype_component_table.html +++ b/netbox/templates/dcim/inc/devicetype_component_table.html @@ -1,6 +1,6 @@ {% load render_table from django_tables2 %} {% if perms.dcim.change_devicetype %} -
+ {% csrf_token %}