1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Added bulk edit/delete views for cables

This commit is contained in:
Jeremy Stretch
2018-11-01 13:19:24 -04:00
parent 2af3685dae
commit c3db7191d2
5 changed files with 75 additions and 5 deletions

View File

@ -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')

View File

@ -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',
)
#

View File

@ -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'),

View File

@ -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
#

View File

@ -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' %}