Просмотр исходного кода

Added bulk edit/delete views for cables

Jeremy Stretch 7 лет назад
Родитель
Сommit
c3db7191d2
5 измененных файлов с 75 добавлено и 5 удалено
  1. 48 0
      netbox/dcim/forms.py
  2. 7 4
      netbox/dcim/tables.py
  3. 2 0
      netbox/dcim/urls.py
  4. 17 0
      netbox/dcim/views.py
  5. 1 1
      netbox/templates/dcim/cable_list.html

+ 48 - 0
netbox/dcim/forms.py

@@ -1879,6 +1879,54 @@ class CableCSVForm(forms.ModelForm):
         return termination_object
 
 
+class CableBulkEditForm(BootstrapMixin, BulkEditForm):
+    pk = forms.ModelMultipleChoiceField(
+        queryset=Cable.objects.all(),
+        widget=forms.MultipleHiddenInput
+    )
+    type = forms.ChoiceField(
+        choices=add_blank_choice(CABLE_TYPE_CHOICES),
+        required=False,
+        initial=''
+    )
+    status = forms.ChoiceField(
+        choices=add_blank_choice(CONNECTION_STATUS_CHOICES),
+        required=False,
+        initial=''
+    )
+    label = forms.CharField(
+        max_length=100,
+        required=False
+    )
+    color = forms.CharField(
+        max_length=6,
+        required=False,
+        widget=ColorSelect()
+    )
+    length = forms.IntegerField(
+        min_value=1,
+        required=False
+    )
+    length_unit = forms.ChoiceField(
+        choices=add_blank_choice(LENGTH_UNIT_CHOICES),
+        required=False,
+        initial=''
+    )
+
+    class Meta:
+        nullable_fields = ['type', 'status', 'label', 'color', 'length']
+
+    def clean(self):
+
+        # Validate length/unit
+        length = self.cleaned_data.get('length')
+        length_unit = self.cleaned_data.get('length_unit')
+        if length and not length_unit:
+            raise forms.ValidationError({
+                'length_unit': "Must specify a unit when setting length"
+            })
+
+
 class CableFilterForm(BootstrapMixin, forms.Form):
     model = Cable
     q = forms.CharField(required=False, label='Search')

+ 7 - 4
netbox/dcim/tables.py

@@ -621,12 +621,13 @@ class DeviceBayTable(BaseTable):
 #
 
 class CableTable(BaseTable):
-    # django-tables2 adds CSS `class="label"` which causes rendering issues
-    pk = tables.LinkColumn(
+    pk = ToggleColumn()
+    id = tables.LinkColumn(
         viewname='dcim:cable',
         args=[Accessor('pk')],
-        verbose_name='PK'
+        verbose_name='ID'
     )
+    # django-tables2 adds CSS `class="label"` which causes rendering issues
     label_ = tables.Column(
         accessor=Accessor('label'),
         verbose_name='Label'
@@ -663,7 +664,9 @@ class CableTable(BaseTable):
 
     class Meta(BaseTable.Meta):
         model = Cable
-        fields = ('pk', 'label_', 'device_a', 'termination_a', 'device_b', 'termination_b', 'status', 'type', 'color')
+        fields = (
+            'pk', 'id', 'label_', 'device_a', 'termination_a', 'device_b', 'termination_b', 'status', 'type', 'color',
+        )
 
 
 #

+ 2 - 0
netbox/dcim/urls.py

@@ -252,6 +252,8 @@ urlpatterns = [
     # Cables
     url(r'^cables/$', views.CableListView.as_view(), name='cable_list'),
     url(r'^cables/import/$', views.CableBulkImportView.as_view(), name='cable_import'),
+    url(r'^cables/edit/$', views.CableBulkEditView.as_view(), name='cable_bulk_edit'),
+    url(r'^cables/delete/$', views.CableBulkDeleteView.as_view(), name='cable_bulk_delete'),
     url(r'^cables/(?P<pk>\d+)/$', views.CableView.as_view(), name='cable'),
     url(r'^cables/(?P<pk>\d+)/edit/$', views.CableEditView.as_view(), name='cable_edit'),
     url(r'^cables/(?P<pk>\d+)/delete/$', views.CableDeleteView.as_view(), name='cable_delete'),

+ 17 - 0
netbox/dcim/views.py

@@ -1683,6 +1683,23 @@ class CableBulkImportView(PermissionRequiredMixin, BulkImportView):
     default_return_url = 'dcim:cable_list'
 
 
+class CableBulkEditView(PermissionRequiredMixin, BulkEditView):
+    permission_required = 'dcim.change_cable'
+    queryset = Cable.objects.prefetch_related('termination_a', 'termination_b')
+    filter = filters.CableFilter
+    table = tables.CableTable
+    form = forms.CableBulkEditForm
+    default_return_url = 'dcim:cable_list'
+
+
+class CableBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
+    permission_required = 'dcim.delete_cable'
+    queryset = Cable.objects.prefetch_related('termination_a', 'termination_b')
+    filter = filters.CableFilter
+    table = tables.CableTable
+    default_return_url = 'dcim:cable_list'
+
+
 #
 # Connections
 #

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

@@ -8,7 +8,7 @@
 <h1>{% block title %}Cables{% endblock %}</h1>
 <div class="row">
 	<div class="col-md-9">
-        {% include 'responsive_table.html' %}
+        {% include 'utilities/obj_table.html' with bulk_edit_url='dcim:cable_bulk_edit' bulk_delete_url='dcim:cable_bulk_delete' %}
     </div>
     <div class="col-md-3">
 		{% include 'inc/search_panel.html' %}