mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
working csv upload first draft
This commit is contained in:
@ -701,10 +701,33 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
|
|||||||
try:
|
try:
|
||||||
# Iterate through CSV data and bind each row to a new model form instance.
|
# Iterate through CSV data and bind each row to a new model form instance.
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
# some prints trying to figure out how the form works
|
|
||||||
print(type(form["Upload_CSV"]))
|
if len(request.FILES) != 0:
|
||||||
print(form["Upload_CSV"].data)
|
csv_file = request.FILES["Upload_CSV"]
|
||||||
headers, records = form.cleaned_data['csv']
|
csv_file.seek(0)
|
||||||
|
csv_str = csv_file.read().decode('utf-8')
|
||||||
|
|
||||||
|
csv_list = csv_str.split('\n')
|
||||||
|
header_row = csv_list[0]
|
||||||
|
csv_list.pop(0)
|
||||||
|
header_list = header_row.split(',')
|
||||||
|
headers = {}
|
||||||
|
for elt in header_list:
|
||||||
|
headers[elt] = None
|
||||||
|
records = []
|
||||||
|
for row in csv_list:
|
||||||
|
if row != "":
|
||||||
|
row_str = (',').join(row)
|
||||||
|
row_list = row.split(',')
|
||||||
|
row_dict = {}
|
||||||
|
for i, elt in enumerate(row_list):
|
||||||
|
if elt == '':
|
||||||
|
row_dict[header_list[i]] = None
|
||||||
|
else:
|
||||||
|
row_dict[header_list[i]] = elt
|
||||||
|
records.append(row_dict)
|
||||||
|
else:
|
||||||
|
headers, records = form.cleaned_data['csv']
|
||||||
for row, data in enumerate(records, start=1):
|
for row, data in enumerate(records, start=1):
|
||||||
obj_form = self.model_form(data, headers=headers)
|
obj_form = self.model_form(data, headers=headers)
|
||||||
restrict_form_fields(obj_form, request.user)
|
restrict_form_fields(obj_form, request.user)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div role="tabpanel" class="tab-pane active" id="csv">
|
<div role="tabpanel" class="tab-pane active" id="csv">
|
||||||
<form action="" method="post" class="form">
|
<form action="" method="post" class="form" enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% render_form form %}
|
{% render_form form %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
Reference in New Issue
Block a user