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:
@ -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')
|
||||
|
@ -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',
|
||||
)
|
||||
|
||||
|
||||
#
|
||||
|
@ -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'),
|
||||
|
@ -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
|
||||
#
|
||||
|
@ -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' %}
|
||||
|
Reference in New Issue
Block a user