Я пишу страницу для загрузки CSV-файла и импорта его содержимого в свои модели. Мой текущий вид:Django - как импортировать из CSV-файла в память
class ContentImport(LoginRequiredMixin, PermissionRequiredMixin,View):
permission_required = 'delivery.change_delivery'
def get(self, request, *args, **kwargs):
form = UploadFileForm()
return render(request, 'delivery/content_import.html', { 'form': form })
def import_contents(self, f):
reader = csv.reader(f)
for row in reader:
print row[0]
def post(self, request, *args, **kwargs):
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
self.import_contents(request.FILES['file'].read())
messages.add_message(self.request, messages.SUCCESS, "Contents deleted successfully.")
return redirect(reverse('delivery:delivery-detail', args=[self.kwargs['delivery_id']]))
else:
messages.add_message(self.request, messages.ERROR, "Select a file to upload.")
return redirect(reverse('delivery:delivery-content-import', args=[self.kwargs['delivery_id']]))
Мой вопрос о методе import_contents
и призыв к ней self.import_contents(request.FILES['file'].read())
. Когда я print row[0]
Я получаю следующую ошибку: индекс индекса вне диапазона.
Моей идеей с этим представлением является загрузка файла, а не сохранение его на сервере, чтение .csv из памяти и создание новых записей в моих моделях. Это прочитано из .csv. Я получил от других ответов здесь, в stackoverflow.
Я думаю, проблема в том, как передать файл функции import_contents или как я прочитал его. Я просто не могу понять. Вы можете мне помочь? Если у вас есть предложение о том, как сделать это более простым способом или правильным способом, дайте мне знать.
С благодарностью за любую помощь
Не переходите к 'read()' при переходе на 'import_contents'. –
Возможный дубликат [Неожиданные результаты, загружающие объект загрузки файла Django в модуль CSV Python] (http://stackoverflow.com/questions/1396126/unexpected-results-feeding-django-file-upload-object-to-python-csv- модуль) –
@ DanielRoseman Это сработало, спасибо! Теперь мне нужно иметь дело с правильным чтением .csv. Когда я использую строку [0], она возвращает целую строку, а не столбец 0. Но это то, что мне нужно выяснить сейчас. –