mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 20:12:00 -06:00
Enable CSV import for virtual chassis
This commit is contained in:
parent
59c1e34024
commit
36cf40f25c
@ -4306,6 +4306,19 @@ class VirtualChassisBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm
|
||||
nullable_fields = ['domain']
|
||||
|
||||
|
||||
class VirtualChassisCSVForm(CSVModelForm):
|
||||
master = CSVModelChoiceField(
|
||||
queryset=Device.objects.all(),
|
||||
to_field_name='name',
|
||||
required=False,
|
||||
help_text='Master device'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = VirtualChassis
|
||||
fields = VirtualChassis.csv_headers
|
||||
|
||||
|
||||
class VirtualChassisFilterForm(BootstrapMixin, CustomFieldFilterForm):
|
||||
model = VirtualChassis
|
||||
q = forms.CharField(
|
||||
|
@ -1578,7 +1578,6 @@ class VirtualChassisTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
||||
name='Device Role', slug='device-role-1'
|
||||
)
|
||||
|
||||
# Create 9 member Devices
|
||||
devices = (
|
||||
Device(device_type=device_type, device_role=device_role, name='Device 1', site=site),
|
||||
Device(device_type=device_type, device_role=device_role, name='Device 2', site=site),
|
||||
@ -1589,10 +1588,13 @@ class VirtualChassisTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
||||
Device(device_type=device_type, device_role=device_role, name='Device 7', site=site),
|
||||
Device(device_type=device_type, device_role=device_role, name='Device 8', site=site),
|
||||
Device(device_type=device_type, device_role=device_role, name='Device 9', site=site),
|
||||
Device(device_type=device_type, device_role=device_role, name='Device 10', site=site),
|
||||
Device(device_type=device_type, device_role=device_role, name='Device 11', site=site),
|
||||
Device(device_type=device_type, device_role=device_role, name='Device 12', site=site),
|
||||
)
|
||||
Device.objects.bulk_create(devices)
|
||||
|
||||
# Create three VirtualChassis with two members each
|
||||
# Create three VirtualChassis with three members each
|
||||
vc1 = VirtualChassis.objects.create(name='VC1', master=devices[0], domain='domain-1')
|
||||
Device.objects.filter(pk=devices[0].pk).update(virtual_chassis=vc1, vc_position=1)
|
||||
Device.objects.filter(pk=devices[1].pk).update(virtual_chassis=vc1, vc_position=2)
|
||||
@ -1616,6 +1618,13 @@ class VirtualChassisTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
||||
'form-MAX_NUM_FORMS': 1000,
|
||||
}
|
||||
|
||||
cls.csv_data = (
|
||||
"name,domain,master",
|
||||
"VC4,Domain 4,Device 10",
|
||||
"VC5,Domain 5,Device 11",
|
||||
"VC6,Domain 6,Device 12",
|
||||
)
|
||||
|
||||
cls.bulk_edit_data = {
|
||||
'domain': 'domain-x',
|
||||
}
|
||||
|
@ -321,6 +321,7 @@ urlpatterns = [
|
||||
# Virtual chassis
|
||||
path('virtual-chassis/', views.VirtualChassisListView.as_view(), name='virtualchassis_list'),
|
||||
path('virtual-chassis/add/', views.VirtualChassisCreateView.as_view(), name='virtualchassis_add'),
|
||||
path('virtual-chassis/import/', views.VirtualChassisBulkImportView.as_view(), name='virtualchassis_import'),
|
||||
path('virtual-chassis/edit/', views.VirtualChassisBulkEditView.as_view(), name='virtualchassis_bulk_edit'),
|
||||
path('virtual-chassis/delete/', views.VirtualChassisBulkDeleteView.as_view(), name='virtualchassis_bulk_delete'),
|
||||
path('virtual-chassis/<int:pk>/', views.VirtualChassisView.as_view(), name='virtualchassis'),
|
||||
|
@ -2304,6 +2304,13 @@ class VirtualChassisRemoveMemberView(ObjectPermissionRequiredMixin, GetReturnURL
|
||||
})
|
||||
|
||||
|
||||
class VirtualChassisBulkImportView(BulkImportView):
|
||||
queryset = VirtualChassis.objects.all()
|
||||
model_form = forms.VirtualChassisCSVForm
|
||||
table = tables.VirtualChassisTable
|
||||
default_return_url = 'dcim:virtualchassis_list'
|
||||
|
||||
|
||||
class VirtualChassisBulkEditView(BulkEditView):
|
||||
queryset = VirtualChassis.objects.all()
|
||||
filterset = filters.VirtualChassisFilterSet
|
||||
|
@ -147,6 +147,7 @@
|
||||
{% if perms.dcim.add_virtualchassis %}
|
||||
<div class="buttons pull-right">
|
||||
<a href="{% url 'dcim:virtualchassis_add' %}" class="btn btn-xs btn-success" title="Add"><i class="fa fa-plus"></i></a>
|
||||
<a href="{% url 'dcim:virtualchassis_import' %}" class="btn btn-xs btn-info" title="Import"><i class="fa fa-download"></i></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<a href="{% url 'dcim:virtualchassis_list' %}">Virtual Chassis</a>
|
||||
|
Loading…
Reference in New Issue
Block a user