Доступ к 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

Вернуться на верх