2011-09-29 73 views
2

我有一個Django模型對象,它具有一些常規屬性,並且它具有用於徽標的ImageField。我想寫一個將該對象複製到新對象的方法。很容易實例化新對象,然後遍歷所有屬性並從舊到新複製(例如​​)。但是,如果我使用徽標字段(即new_object.logo = old_object.logo)執行此操作,則new_object和old_object都將指向硬盤上的同一文件。如果您編輯舊文件,新對象的徽標將會更改。將ImageField的內容複製到Django中的新文件路徑

獲得ImageField的完整/深層副本的最佳方法是什麼?我希望它具有不同的文件名並指向磁盤上的其他文件,但它應該具有完全相同的內容。

回答

2

爲什麼不創建一個有趣的保存信號功能,它將圖像文件複製到任何你想要的,然後創建一個新的對象與一個新的圖像字段?

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

相關問題