Просмотр исходного кода

working csv upload first draft

Alyssa Bigley 4 лет назад
Родитель
Сommit
0c9376039c
2 измененных файлов с 28 добавлено и 5 удалено
  1. 27 4
      netbox/netbox/views/generic.py
  2. 1 1
      netbox/templates/generic/object_bulk_import.html

+ 27 - 4
netbox/netbox/views/generic.py

@@ -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"]))
-                    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):
                     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)

+ 1 - 1
netbox/templates/generic/object_bulk_import.html

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