python, django: 复制图像
我写了一个函数,用来把一个Django模型中的图片复制到另一个Django模型中。这个图片需要重复保存:
def __copy_file__(from_object,to_object,field):
attr = field.attname
try:
newpath = getattr(from_object,attr).path
dot_at = newpath.rfind(".")
while os.path.exists(newpath):
newpath = newpath[:dot_at] + "_" + newpath[dot_at:]
shutil.copyfile(getattr(from_object,attr).path, newpath)
getattr(to_object,attr).save(newpath, File(open(getattr(from_object,attr).path)))
return True
except ValueError:
return False
但是这个函数生成的文件有点问题……我记得之前它是可以工作的,但今天测试的时候发现它不行了……
补充一下:现在我知道这个函数会生成两张图片。一张是正常的,另一张就不行。那行代码shutil.copyfile (etc)
生成的是正常的那张,而在getattr(to_object,attr).save (etc)
这行中,图片又被保存了一次。所以问题就在这里。它应该只是被赋值,而不是再复制一次……
有人能帮我吗? :)
1 个回答
3
我这样做,假设 from_model
和 to_model
是两个模型的实例,并且它们都有一个图片字段(ImageField):
def copy_image(from_model, to_model):
to_model.image.save(from_model.image.url.split('/')[-1],from_model.image.file,save=True)