python, django: 复制图像

2 投票
1 回答
1357 浏览
提问于 2025-04-16 06:00

我写了一个函数,用来把一个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_modelto_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)

撰写回答