我在磁盘上有一个现有文件(例如/folder/file.txt)和Django中的FileField模型字段.
当我做
instance.field = File(file('/folder/file.txt'))
instance.save()
Run Code Online (Sandbox Code Playgroud)
它将文件重新保存为file_1.txt(下一次_2,等等).
我理解为什么,但我不想要这种行为 - 我知道我希望该字段与之关联的文件真的在那里等着我,我只想让Django指向它.
怎么样?
我有一个模型FileField,其中包含用户上传的文件.由于我想节省空间,我想避免重复.
我想要实现的目标:
1和2已经可以使用了,但是如何忘记上传的副本并使用现有文件呢?
请注意,我想保留现有文件而不是覆盖它(主要是为了保持修改时间相同 - 更好的备份).
笔记:
django.core.files.uploadhandler.TemporaryFileUploadHandler码:
def media_file_name(instance, filename):
h = instance.md5sum
basename, ext = os.path.splitext(filename)
return os.path.join('mediafiles', h[0:1], h[1:2], h + ext.lower())
class Media(models.Model):
orig_file = models.FileField(upload_to=media_file_name)
md5sum = models.CharField(max_length=36)
...
def save(self, *args, **kwargs):
if not self.pk: # file is new
md5 = hashlib.md5()
for chunk in self.orig_file.chunks(): …Run Code Online (Sandbox Code Playgroud)