Что не так с кодом для импорта CSV в Django с Form / CreateView? - PullRequest
0 голосов
/ 21 февраля 2020

Итак, я пытаюсь загрузить CSV с именем и адресом электронной почты, чтобы заполнить мое приложение для голосования, и я действительно застрял. Есть варианты, но ни один из них на самом деле не использует CBV для этого (как кажется). Я уверен, что это можно сделать, но я не могу понять, как. Основная цель - загрузить данные из csv и добавить детали в базу данных. Вот что я попробовал:

Вариант 1:

def form_valid(self, form, **kwargs):
        formfile = csv.DictReader(self.request.FILES['file'].read().decode("utf-8"))
        print(formfile)
        try:
            for row in dictreader:
                print(row)
                field = row.split(";")
                print(field[1])
        except Exception as e:
            print("buggedy bug in dictreader")
        return super().form_valid(form)

Это выдает исключение, и печать (файл формы) дает OrderedDict([('user1@usedmail.com', ';')])

Опция 2:

def form_valid(self, form, **kwargs):
        formfile = self.request.FILES['file'].read()
        dictreader = csv.DictReader(formfile)
        print(dictreader)
        try:
            for row in reader:
                print(row)
                field = row.split(";")
                print(field[0])
        except Exception as e:
            print('buggedy bug in reader')
        return super().form_valid(form)

Команда печати печатает <_csv.reader object at 0x0000020048B4E388> и выдает исключение.

Опции 3:

def form_valid(self, form, **kwargs):
        csv_load = self.request.FILES['file'].read()
        print("csv is read")
        print(csv_load)
        csv_file = csv.reader(csv_load)
        print(csv_file)
        num = csv_file.replace('\r','').replace('b','').replace("'",'')
        print("stuff is replaced")
        for line in num:
            print(line)
            print("line is printed")
            field = line.split(";")
            print(field[0])
        return super().form_valid(form)

это обрабатывает файл, но дает только строки с 1 буквой в каждой строке.

Опция 4:

def form_valid(self, form, **kwargs):
        reader = self.request.FILES['file']
        print(reader)
        for row in reader:
            print(row)
            field = row.split(";")
            print(field[1])

, но это дает мне : TypeError: a bytes-like object is required, not 'str'

К вашему сведению: я делал "импорт CSV", когда это необходимо.

Это от forms.py:

class UploadCSVForm(forms.Form):
    file = forms.FileField()

Следует отметить, что я использую команды печати для проверки во время процесса. Может быть, метод нуб, извините за это.

функция csv.DictReader выглядит прекрасно для обработки, но что-то идет не так.

Просто чтобы вы знали предполагаемое использование после этого: После прочтения полей CSV я хочу добавить их в базу данных и добавить дополнительное поле с хэшированным значением адреса электронной почты и случайным числом для проверки позже ,

Любая помощь очень ценится.

...