Pergunta

Estou lidando com algumas bastante grandes arquivos que são desconfortável para carregar via http, de modo que meus usuários fazer upload de arquivos utilizando FTP que meu código, então, precisa mudar para FileField.upload_to (onde normalmente acabam quando carregado via HTTP). Meu problema é o método comumente sugerido de usar django.core.files.File:

from django.core.files import File

# filename is a FileField
file_obj = MyModel(filename=File(open('VIDEO_TS.tar', 'rb')))

leva a copiar os dados, o que eu preciso para evitar. Existe alguma maneira de adicionar o arquivo já existente para um FileField assegurando ao mesmo tempo upload_to é chamado?

Foi útil?

Solução

Eu diria que maneira mais fácil seria escrever o seu próprio campo ou armazenamento.

Outras dicas

um pouco tarde, mas:

class _ExistingFile(UploadedFile):
    """ Utility class for importing existing files to FileField's. """

    def __init__(self, path, *args, **kwargs):
        self.path = path
        super(_ExistingFile, self).__init__(*args, **kwargs)

    def temporary_file_path(self):
        return self.path

    def close(self):
        pass

    def __len__(self):
        return 0

uso:

my_model.file_field.save(upload_to, _ExistingFile('VIDEO_TS.tar'))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top