import csv
import io
import re
from django.http import HttpResponse
from django.shortcuts import render
from django.views import generic
from ...forms import CsvUploadForm
import pandas as pd
class CsvImportView(generic.base.View):
def getemailcolumn(self, sample):
for key, val in sample:
print(key, val)
if re.match("^.+@([?)[a-zA-Z0-9-.]+.([a-zA-Z]{2,3}|[0-9]{1,3})(]?)$", val[0]) is not None:
return key
return None
def post(self, request):
form = CsvUploadForm(request.POST, request.FILES)
if form.is_valid():
fieldnames = ['first_name', 'email', 'last_name']
csv = pd.read_csv(request.FILES['csv'])
sample =csv.head();
emailColumn = getemailcolumn(sample)
return HttpResponse(sample)
else:
...
...
когда выполняется метод публикации, я получаю сообщение об ошибке "имя не определено"
name 'getemailcolumn' is not defined
что мне не хватает?






Вам нужно сделать отступ для методов get и post, потому что python считает, что они не являются частью класса CsvImportView. Так что сделайте для них отступ в соответствии с функцией, которую вы вызываете.
Обновлено: Хорошо, это должно быть self.getmailcolumn, а не просто имя функции
отступы здесь не проблема, это проблема копирования и вставки SO. скорректировал отступ. Но ваш ответ неверен
getemailcolumn() - это метод экземпляра. Он может быть доступен через self или class instance. В вашем случае вы пытаетесь получить к нему доступ из другого метода экземпляра. Так и должно быть,
emailColumn = self.getemailcolumn(sample)
self.getemailcolumn(sample)? Кроме того, сделайте отступ в коде для лучшей видимости.