gpt4 book ai didi

Django:复制文件字段

转载 作者:行者123 更新时间:2023-12-04 22:49:44 25 4
gpt4 key购买 nike

我正在尝试使用硬链接(hard link)复制文件,其中文件存储为 Django FileField。我想使用硬链接(hard link)来节省空间和复制时间(预计不会对原始文​​件或副本进行任何更改)。但是,当我尝试从下面的代码段中调用 new_file.save() 时,我遇到了一些奇怪的错误。

AttributeError: 'file' object has no attribute '_committed'

我的想法是,在进行硬链接(hard link)之后,我可以打开链接文件并将其存储到 Django 新文件实例的 FileFile 中。我在这里错过了一步还是什么?

模型.py
class File(models.Model):
stored_file = models.FileField()

别处.py
import os 

original_file = File.objects.get(id=1)
original_file_path = original_file.file.path

new_file = File()
new_file_path = '/path/to/new/file'

os.makedirs(os.path.realpath(os.path.dirname(new_file_path)))
os.link(original_file_path, new_file_path)
new_file.stored_file = file(new_file_path)
new_file.save()

最佳答案

无需创建硬链接(hard link),只需复制文件持有者:

new_file = File(stored_file=original_file.stored_file)
new_file.save()

更新

如果您想将文件指定为 FileField 或 ImageField,您可以简单地
new_file = File(stored_file=new_file_path)
# or
new_file = File()
new_file.stored_file = new_file_path
# or
from django.core.files.base import File
# from django.core.files.images import ImageFile # for ImageField
new_file.stored_file = File(new_file_path)

该字段接受 basestring 或 File() 实例中的路径,您问题中的代码使用 file(),因此不被接受。

关于Django:复制文件字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com