Доступ к TemporaryFilePath в form_valid Django
В настоящее время мои пользователи могут загружать файлы, поскольку я развернут через Heroku, я использую Django-storages для загрузки в AWS S3 buckets. Я использую CreateView/UpdateView, как показано ниже, это работает хорошо, но теперь я хочу иметь возможность выполнять операции над файлом перед загрузкой в AWS, мои исследования показывают, что я могу использовать temporary_file_path() для этого в form_valid, но я получаю ошибку, UpdateView/CreateView
class project_update(LoginRequiredMixin, UpdateView):
model = Project
form_class = ProjectForm
template_name = "home/update_project.html"
context_object_name = 'project'
success_url = reverse_lazy("project-list")
def form_valid(self, form):
handle_uploaded_boq(form['boq_file'].temporary_file_path(), form.cleaned_data['project_title'])
return super(project_update, self).form_valid(form)
Однако я получаю следующую ошибку:
'BoundField' object has no attribute 'temporary_file_path'
Как лучше всего выполнить операцию handle_uploaded_boq()
перед загрузкой файла в AWS?
для доступа к файлу в методе form_valid вы можете использовать
form.files['boq_file']
а для доступа к пути загруженного файла класса TemporaryUploadedFile используйте
form.files['boq_file'].temporary_file_path()
или
form.files['boq_file'].file.name
Примечание: чтобы получить путь к загруженному файлу, загруженный файл должен быть объектом класса TemporaryUploadedFile, а не InMemoryUploadedFile. Вы можете справиться с этим, обновив FILE_UPLOAD_HANDLERS в set.py на следующее
FILE_UPLOAD_HANDLERS = [
'django.core.files.uploadhandler.TemporaryFileUploadHandler',
]
предполагая, что имя поля file_field, которое вы использовали в форме, - boq_file