【问题标题】:Copy the contents of an ImageField to a new file path in Django将 ImageField 的内容复制到 Django 中的新文件路径
【发布时间】:2011-11-27 14:30:07
【问题描述】:

我有一个 Django 模型对象,它有一些普通属性,并且它有一个用于徽标的 ImageField。我想编写一个将这个对象复制到一个新对象的方法。实例化新对象很容易,然后遍历所有属性并从旧对象复制到新对象(例如new_object.name = old_object.name)。但是,如果我使用徽标字段(即new_object.logo = old_object.logo)执行此操作,则 new_object 和 old_object 都指向硬盘上的同一个文件。如果您编辑旧文件,新对象的徽标将会更改。

拥有 ImageField 的完整/深层副本的最佳方式是什么?我希望它具有不同的文件名并指向磁盘上的不同文件,但它应该具有完全相同的内容。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    为什么不在保存信号上创建一个有趣的函数,它将图像文件复制到您想要的任何位置,然后创建一个具有新图像字段的新对象?

    models.py

    class ObjectOne(models.Model):
        logo = models.ImageField(...)
    
    class ObjectTwo(models.Model):
        logo = models.ImageField(...)
    
    from django.db.models.signals import post_save
    from signals import my_signal
    post_save.connect(my_signal, dispatch_uid="001")
    

    signals.py

    from models. import ObjectOne, ObjectTwo
    def my_signal(sender, instance, *args, **kwargs):
        if sender is ObjectOne:
            new_obj = ObjectTwo()
            new_obj.logo.save("custom/path/new_filename.jpg",File(open(instance.image.url,"w"))
            new_obj.save()
    

    我没有测试图像复制代码,但这是一般的想法。这里还有更多:

    Programmatically saving image to Django ImageField

    Django: add image in an ImageField from image url

    how to manually assign imagefield in Django

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2013-09-15
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多