Как я могу сохранить ответ класса представления Django в другой функции и выполнить его в следующей функции?
Info: Я хочу сделать приложение, как загрузить файл перед отправкой формы. Я загружаю файлы с помощью uppy, которая является front-end библиотекой. TusUpload
будет получать данные файла и хранить в Library
модели.
Я хочу получить загруженные файлы в другую функцию view
для присоединения этих загруженных файлов к другим Model object
. То есть, я хочу хранить TusUpload
ответ в другой функции, а затем create_page
будет принимать эти загруженные файлы перед отправкой формы и затем отправлять ее с Post
объектом модели.
Я знаю, что ajax сохраняет ответ TusUpload
и затем мы передаем эти файлы ID's
в 'create_pagebut i don't want to use this method. I want to pass these files
ID's' в бэкенде Не с помощью javascript.
Надеюсь, вы сможете предоставить информацию.
class TusUpload(View):
def post(self, request, *args, **kwargs):
metadata = self.get_metadata(request)
metadata["filename"] = self.validate_filename(metadata)
message_id = request.META.get("HTTP_MESSAGE_ID")
if message_id:
metadata["message_id"] = base64.b64decode(message_id)
file_size = int(request.META.get("HTTP_UPLOAD_LENGTH", "0"))
tus_file = TusFile.create_initial_file(metadata, file_size)
return TusResponse(
status=201,
extra_headers={'Location': '{}{}'.format(request.build_absolute_uri(), tus_file.resource_id)})
def head(self, request, resource_id):
tus_file = TusFile.get_tusfile_or_404(str(resource_id))
return TusResponse(
status=200,
extra_headers={
'Upload-Offset': tus_file.offset,
'Upload-Length': tus_file.file_size,
})
def patch(self, request, resource_id, *args, **kwargs):
tus_file = TusFile.get_tusfile_or_404(str(resource_id))
chunk = TusChunk(request)
if not tus_file.is_valid():
return TusResponse(status=410)
if chunk.offset != tus_file.offset:
return TusResponse(status=409)
if chunk.offset > tus_file.file_size:
return TusResponse(status=413)
tus_file.write_chunk(chunk=chunk)
if tus_file.is_complete():
# file transfer complete, rename from resource id to actual filename
tus_file.has_dir()
tus_file.rename()
tus_file.clean()
lib_file = Library.objects.create( # TODO want to get these file to other views
user=self.request.user,
file=f'/media/uploads/{tus_file.filename}',
)
lib_file.save()
self.send_signal(tus_file)
self.finished()
return TusResponse(status=204, extra_headers={'Upload-Offset': tus_file.offset})
def create_page(request):
if request.method == 'POST':
form = PostForm(request.POST or None, request.FILES)
if form.is_valid():
form.save(commit=False)
form.instance.author = request.user
form.save()
TusUpload() # TODO want get uploaded file here
return redirect('index_page')
else:
form = PostForm()
context = {
'form': form,
}
return render(request, 'core/_form.html', context)