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 logging
|
||||||
import re
|
import re
|
||||||
|
import csv
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from django.contrib import messages
|
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.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist, ValidationError
|
||||||
from django.db import transaction, IntegrityError
|
from django.db import transaction, IntegrityError
|
||||||
from django.db.models import ManyToManyField, ProtectedError
|
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.http import HttpResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
@ -668,7 +669,6 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
|
|||||||
Upload_CSV = FileField(
|
Upload_CSV = FileField(
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
# this is where the import form is created -- add csv upload here or create new form?
|
|
||||||
return ImportForm(*args, **kwargs)
|
return ImportForm(*args, **kwargs)
|
||||||
|
|
||||||
def _save_obj(self, obj_form, request):
|
def _save_obj(self, obj_form, request):
|
||||||
@ -693,7 +693,6 @@ class BulkImportView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View):
|
|||||||
logger = logging.getLogger('netbox.views.BulkImportView')
|
logger = logging.getLogger('netbox.views.BulkImportView')
|
||||||
new_objs = []
|
new_objs = []
|
||||||
form = self._import_form(request.POST)
|
form = self._import_form(request.POST)
|
||||||
# this is where the csv data is handled
|
|
||||||
|
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
logger.debug("Form validation was successful")
|
logger.debug("Form validation was successful")
|
||||||
@ -701,33 +700,27 @@ 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():
|
||||||
|
|
||||||
if len(request.FILES) != 0:
|
if len(request.FILES) != 0:
|
||||||
csv_file = request.FILES["Upload_CSV"]
|
csv_file = request.FILES["Upload_CSV"]
|
||||||
csv_file.seek(0)
|
csv_file.seek(0)
|
||||||
csv_str = csv_file.read().decode('utf-8')
|
csv_str = csv_file.read().decode('utf-8')
|
||||||
|
reader = csv.reader(csv_str.splitlines())
|
||||||
csv_list = csv_str.split('\n')
|
headers_list = next(reader)
|
||||||
header_row = csv_list[0]
|
|
||||||
csv_list.pop(0)
|
|
||||||
header_list = header_row.split(',')
|
|
||||||
headers = {}
|
headers = {}
|
||||||
for elt in header_list:
|
for header in headers_list:
|
||||||
headers[elt] = None
|
headers[header] = None
|
||||||
records = []
|
records = []
|
||||||
for row in csv_list:
|
for row in reader:
|
||||||
if row != "":
|
row_dict = {}
|
||||||
row_str = (',').join(row)
|
for i, elt in enumerate(row):
|
||||||
row_list = row.split(',')
|
if elt == '':
|
||||||
row_dict = {}
|
row_dict[headers_list[i]] = None
|
||||||
for i, elt in enumerate(row_list):
|
else:
|
||||||
if elt == '':
|
row_dict[headers_list[i]] = elt
|
||||||
row_dict[header_list[i]] = None
|
records.append(row_dict)
|
||||||
else:
|
|
||||||
row_dict[header_list[i]] = elt
|
|
||||||
records.append(row_dict)
|
|
||||||
else:
|
else:
|
||||||
headers, records = form.cleaned_data['csv']
|
headers, records = form.cleaned_data['csv']
|
||||||
|
print("headers:", headers, "records:", records)
|
||||||
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)
|
||||||
|
Reference in New Issue
Block a user