假设我有一个类似这样的模型-
class Test(models.Model):
some_file=FileField(upload_to='test_directory')
class TestTransfer(models.Model):
transferred_file=FileField(upload_to='transfer_directory')
现在,我已经尝试过像这样的简单对象到对象的复制:
transfer_object.transferred_file=test_object.some_file
transfer_object.save()
上面的代码没有做的是,它没有将文件上传到transfer_directory
。由于文件很大,所以我不希望它占用内存空间,并且有多个文件需要传输。
如果需要,我正在使用S3
作为媒体存储。
如果有解决此问题的方法,我会感到满足
答案 0 :(得分:1)
是的,您必须创建新文件,而不仅仅是复制旧文件的路径。由于您将S3与django-storages
一起使用,因此可以按照以下步骤进行操作:
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
new_file = ContentFile('')
new_file.name = os.path.basename(test_object.some_file.name)
transfer_object.transferred_file = new_file
transfer_object.save()
bucket = default_storage.bucket
original_file = default_storage.open(test_object.some_file.name)
destination_file = default_storage.open(transfer_object.transferred_file.name)
copy_source = {
'Bucket': bucket.name,
'Key': original_file.obj.key
}
bucket.copy(copy_source, destination_file.obj.key)