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
|
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):
|
class CableFilterForm(BootstrapMixin, forms.Form):
|
||||||
model = Cable
|
model = Cable
|
||||||
q = forms.CharField(required=False, label='Search')
|
q = forms.CharField(required=False, label='Search')
|
||||||
|
@ -621,12 +621,13 @@ class DeviceBayTable(BaseTable):
|
|||||||
#
|
#
|
||||||
|
|
||||||
class CableTable(BaseTable):
|
class CableTable(BaseTable):
|
||||||
# django-tables2 adds CSS `class="label"` which causes rendering issues
|
pk = ToggleColumn()
|
||||||
pk = tables.LinkColumn(
|
id = tables.LinkColumn(
|
||||||
viewname='dcim:cable',
|
viewname='dcim:cable',
|
||||||
args=[Accessor('pk')],
|
args=[Accessor('pk')],
|
||||||
verbose_name='PK'
|
verbose_name='ID'
|
||||||
)
|
)
|
||||||
|
# django-tables2 adds CSS `class="label"` which causes rendering issues
|
||||||
label_ = tables.Column(
|
label_ = tables.Column(
|
||||||
accessor=Accessor('label'),
|
accessor=Accessor('label'),
|
||||||
verbose_name='Label'
|
verbose_name='Label'
|
||||||
@ -663,7 +664,9 @@ class CableTable(BaseTable):
|
|||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = Cable
|
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
|
# Cables
|
||||||
url(r'^cables/$', views.CableListView.as_view(), name='cable_list'),
|
url(r'^cables/$', views.CableListView.as_view(), name='cable_list'),
|
||||||
url(r'^cables/import/$', views.CableBulkImportView.as_view(), name='cable_import'),
|
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+)/$', 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+)/edit/$', views.CableEditView.as_view(), name='cable_edit'),
|
||||||
url(r'^cables/(?P<pk>\d+)/delete/$', views.CableDeleteView.as_view(), name='cable_delete'),
|
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'
|
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
|
# Connections
|
||||||
#
|
#
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<h1>{% block title %}Cables{% endblock %}</h1>
|
<h1>{% block title %}Cables{% endblock %}</h1>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-9">
|
<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>
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
{% include 'inc/search_panel.html' %}
|
{% include 'inc/search_panel.html' %}
|
||||||
|
Reference in New Issue
Block a user