1
0
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:
Alyssa Bigley
2021-05-27 10:31:51 -04:00
parent e1fe3ca14a
commit 0c9376039c
2 changed files with 28 additions and 5 deletions

View File

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

View File

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