mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
csv parse using python csv library
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
import logging
|
||||
import re
|
||||
import csv
|
||||
from copy import deepcopy
|
||||
|
||||
from django.contrib import messages
|
||||
@ -7,7 +8,7 @@ from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist, ValidationError
|
||||
from django.db import transaction, IntegrityError
|
||||
from django.db.models import ManyToManyField, ProtectedError
|
||||
from django.forms import Form, ModelMultipleChoiceField, MultipleHiddenInput, Textarea, FileField, CharField
|
||||
from django.forms import Form, ModelMultipleChoiceField, MultipleHiddenInput, Textarea, FileField
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.utils.html import escape
|
||||
@ -668,7 +669,6 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
|
||||
Upload_CSV = FileField(
|
||||
required=False
|
||||
)
|
||||
# this is where the import form is created -- add csv upload here or create new form?
|
||||
return ImportForm(*args, **kwargs)
|
||||
|
||||
def _save_obj(self, obj_form, request):
|
||||
@ -693,7 +693,6 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
|
||||
logger = logging.getLogger('netbox.views.BulkImportView')
|
||||
new_objs = []
|
||||
form = self._import_form(request.POST)
|
||||
# this is where the csv data is handled
|
||||
|
||||
if form.is_valid():
|
||||
logger.debug("Form validation was successful")
|
||||
@ -701,33 +700,27 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
|
||||
try:
|
||||
# Iterate through CSV data and bind each row to a new model form instance.
|
||||
with transaction.atomic():
|
||||
|
||||
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(',')
|
||||
reader = csv.reader(csv_str.splitlines())
|
||||
headers_list = next(reader)
|
||||
headers = {}
|
||||
for elt in header_list:
|
||||
headers[elt] = None
|
||||
for header in headers_list:
|
||||
headers[header] = 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)
|
||||
for row in reader:
|
||||
row_dict = {}
|
||||
for i, elt in enumerate(row):
|
||||
if elt == '':
|
||||
row_dict[headers_list[i]] = None
|
||||
else:
|
||||
row_dict[headers_list[i]] = elt
|
||||
records.append(row_dict)
|
||||
else:
|
||||
headers, records = form.cleaned_data['csv']
|
||||
print("headers:", headers, "records:", records)
|
||||
for row, data in enumerate(records, start=1):
|
||||
obj_form = self.model_form(data, headers=headers)
|
||||
restrict_form_fields(obj_form, request.user)
|
||||
|
Reference in New Issue
Block a user