Итак, я пытаюсь загрузить 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 я хочу добавить их в базу данных и добавить дополнительное поле с хэшированным значением адреса электронной почты и случайным числом для проверки позже ,
Любая помощь очень ценится.