aem*_*mdy 7 django file django-models filefield
我知道这里有一个非常相似的线程,但我无法找到解决问题的方法.
我需要重命名一个保存在django models.FileField中的文件
我试过这个
os.rename(old_path, new_path)
mod.direct_file = File(open(new_path))
mod.save()
Run Code Online (Sandbox Code Playgroud)
还有这个
mod.direct_file.save(new_path, File(open(old_path)))
os.remove(old_path)
Run Code Online (Sandbox Code Playgroud)
还有很多方法,但似乎没有任何帮助.以各种方式创建新文件,但是,文件字段中的数据根本不会更改.
编辑:已解决
os.rename(old_path, new_path)
cursor = connection.cursor()
cursor.execute("UPDATE mods_mod SET direct_file = %s WHERE id = %s", [new_name, mod.id])
transaction.commit_unless_managed()
Run Code Online (Sandbox Code Playgroud)
Bri*_*eal 13
我不认为你需要使用原始SQL.我认为你需要使用os工具重命名文件,然后将模型的FileField名称设置为新名称.也许是这样的:
os.rename(model.direct_file.path, new_path)
model.direct_file.name = new_name
model.save()
Run Code Online (Sandbox Code Playgroud)
小智 5
new_name = 'photos_preview/' + str(uuid.uuid1())
os.rename(photo.image_preview.path, settings.MEDIA_ROOT + new_name)
photo.image_preview.name = new_name
photo.save()
Run Code Online (Sandbox Code Playgroud)