Django : не удается прервать функцию обновления с помощью редиректа. Возможно ли это?
Я использую функцию для обновления Модели.
def update_mapping(request, pk):
flow = Flow.objects.get(pk=pk)
mappings = MappingField.objects.filter(fl_id=pk)
headers_samples = GetCsvHeadersAndSamples(request, pk)
[...]
В этой функции я вызываю другую (GetCsvHeadersAndSamples) для получения данных из CSV. Позже я использую эти данные с помощью JS в шаблоне.
def GetCsvHeadersAndSamples(request, flow_id):
get_file_and_attribs = get_csv(request, flow_id)
file = get_file_and_attribs[0]
separator = get_file_and_attribs[1]
encoding = get_file_and_attribs[2]
with open(file, encoding=encoding) as f:
reader = csv.reader(f, delimiter=separator)
headers = next(reader)
samples = next(itertools.islice(csv.reader(f), 1, None))
headersAndSamples = {'headers': headers, 'samples': samples}
return headersAndSamples
Для доступа к данным CSV я использую другую функцию для проверки, существует ли еще CSV, в этом случае я извлекаю данные из него.
def get_csv(request, flow_id):
flow = Flow.objects.get(pk=flow_id)
file = flow.fl_file_name
separator = flow.fl_separator
media_folder = settings.MEDIA_ROOT
file = os.path.join(media_folder, str(file))
if os.path.isfile(file):
file_2_test = urllib.request.urlopen('file://' + file).read()
encoding = (chardet.detect(file_2_test))['encoding']
return (file, separator, encoding)
else:
# print('No file')
messages.error(request, "File not found or corrupted.")
return HttpResponseRedirect(reverse('mappings-list', args=(flow_id,)))
Я надеялся, что возврат "сломает" мою первоначальную функцию и перенаправит на страницу 'mappings-list' с сообщением.error. Но она продолжается и возвращается к функции GetCsvHeadersAndSamples, которая выдает ошибку, поскольку данные CSV не найдены. Замечание: закомментированный print однако хорошо показывает, что файл не найден.
Похоже, что мой способ действий не самый лучший.