Как мне получить доступ к файлу, который привязан к форме?

#python #django #forms

#python #django #формы

Вопрос:

У меня есть файл, привязанный к форме следующим образом: (forms.py ) класс UploadFileForm(forms.Form): wbfile = формы.FileField(label=’Загрузить рабочую книгу’, help_text =’Пожалуйста, убедитесь, что файл находится в формате .xlsx’)

Теперь я могу получить доступ к этому в функции просмотра с помощью запроса.FILES[‘wbfile’] . Но я хочу отправить этот файл в шаблон, а затем в другую функцию просмотра. Итак, я привязал его к форме, подобной этой:

 f = form.fields['wbfile']
 

Теперь я хочу сохранить этот файл на диске, но как мне получить доступ к этому файлу, вот что я пытаюсь:

 f = form.fields['file'].value()
with open(/tmp/xyz) as destination:
    contents = f.read()
    destination.write(contents)
 

Но это выдает сообщение об ошибке: объект ‘FileField’ не имеет атрибута ‘value’.

Это то, что показывает for.fields[wbfile]:

 <django.forms.fields.FileField object at 0x7f91ff1c49d0>
 

Следовательно, файл определенно привязан к форме.

Пожалуйста, помогите и простите меня, если сомнения слишком очевидны, я новичок!

Комментарии:

1. Я не понял, что вы хотите?. У вас есть два представления: одно для просмотра файла, а другое — для доступа к файлу. Это правильно?

2. Я хочу передать файл из шаблона в представление, а затем в другой шаблон, а затем в другое представление, если это имеет смысл!

Ответ №1:

Я думаю, что в документации Django есть все, что вам нужно.

Для FileField : https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield

Попробуйте использовать YourFileField.storage и YourFileField .путь для доступа к файлу.

Затем с помощью этого документа: https://docs.djangoproject.com/en/dev/ref/files/storage /

Вы можете использовать open, чтобы открыть свой файл в памяти. Я думаю, это может дать такой код :

 storage, path = YourFileField.storage, YourFileField.path
File f = storage.open(path)
 

Я не совсем понимаю, что вы хотите делать дальше, но если вы хотите сохранить файл в другом месте, я думаю, вы, вероятно, можете использовать :

 f.save(path) #or something similar, haven't tested any code like this
 

Комментарии:

1. Это то, что я пытаюсь:

2. Это то, что я пытаюсь: у меня есть опция просмотра файла и кнопка «Далее» (которая имеет тип отправки). При нажатии на это становятся видны 2 опции: проверка и загрузка файла. Обзор-> Далее-> Проверка-> Загрузка. Теперь, когда файл загружается с помощью опции просмотра, управление переключается на представление, а после рендеринга управление переключается на шаблон. Теперь это происходит рекурсивно, я хочу сохранять файл в каждой транзакции. (Я использую случайные имена файлов здесь). Надеюсь, я ясно выразился!

3. Единственным решением, которое я вижу, было бы использование файла cookie, хранящего файл. Я не понимаю, почему вы должны перемещать свой файл из шаблона в представление (здесь ничего особенного), затем из представления в шаблон (почему бы и нет, для целей отображения, я полагаю), но тогда зачем снова просматривать? Кроме того, почему вы не сохраняете свой файл в базе данных?

4. Я изучу файлы cookie и предлагаемый способ, большое спасибо. Причина, по которой я столкнулся с этим беспорядком, заключалась в том, чтобы не загромождать сервер без необходимости. Я думаю, что дизайн ошибочен и начнется с новой стратегии.