我创建了此功能,以将图像从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)中再次保存图像。所以这就是问题所在。应该只分配它,而不要再次复制。

有谁能够帮助我? :)

最佳答案

我做的方式,假设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)

关于python - python,django:复制图片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4008734/

10-11 02:42