Как я могу сохранить ответ класса представления 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 filesID'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)
Вернуться на верх