From 0c9376039c84a24a2d38bb316a601bb155d326bc Mon Sep 17 00:00:00 2001 From: Alyssa Bigley Date: Thu, 27 May 2021 10:31:51 -0400 Subject: [PATCH] working csv upload first draft --- netbox/netbox/views/generic.py | 31 ++++++++++++++++--- .../templates/generic/object_bulk_import.html | 2 +- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/netbox/netbox/views/generic.py b/netbox/netbox/views/generic.py index 8228f6eff..c01f69783 100644 --- a/netbox/netbox/views/generic.py +++ b/netbox/netbox/views/generic.py @@ -701,10 +701,33 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View): try: # Iterate through CSV data and bind each row to a new model form instance. with transaction.atomic(): - # some prints trying to figure out how the form works - print(type(form["Upload_CSV"])) - print(form["Upload_CSV"].data) - headers, records = form.cleaned_data['csv'] + + if len(request.FILES) != 0: + csv_file = request.FILES["Upload_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): obj_form = self.model_form(data, headers=headers) restrict_form_fields(obj_form, request.user) diff --git a/netbox/templates/generic/object_bulk_import.html b/netbox/templates/generic/object_bulk_import.html index 170cf3665..e9972e919 100644 --- a/netbox/templates/generic/object_bulk_import.html +++ b/netbox/templates/generic/object_bulk_import.html @@ -20,7 +20,7 @@
-
+ {% csrf_token %} {% render_form form %}