Aam*_*amu 4 django django-models django-orm django-views
我想将图像从一个模型复制到项目中的另一个模型。假设这些是我的模型:
class BackgroundImage(models.Model):
user = models.ForeignKey(User)
image = models.ImageField(upload_to=get_upload_file_name)
caption = models.CharField(max_length=200)
pub_date = models.DateTimeField(default=datetime.now)
class ProfilePicture(models.Model):
user = models.ForeignKey(User)
image = models.ImageField(upload_to=get_upload_file_name)
caption = models.CharField(max_length=200)
pub_date = models.DateTimeField(default=datetime.now)
@classmethod
def create_from_bg(cls, bg_img):
img = cls(user=bg_img.user, image=bg_img.image, caption=bg_img.caption+'_copy', pub_date=bg_img.pub_date)
img.save()
return img
Run Code Online (Sandbox Code Playgroud)
现在,我可以执行以下操作:
获取用户
>>>m = User.objects.get(username='m')
Run Code Online (Sandbox Code Playgroud)
获取用户的个人资料图片集
>>>m_pro_set = m.profilepicture_set.all()
>>>m_pro_set
[<ProfilePicture: pro_mik>]
Run Code Online (Sandbox Code Playgroud)
从用户的背景图像获取图像对象
>>>m_back_1 = m.backgroundimage_set.get(id=2)
>>>m_back_1
<BackgroundImage: bg_mik>
Run Code Online (Sandbox Code Playgroud)
然后:
>>>profile_pic = ProfilePicture.create_from_bg(m_back_1)
Run Code Online (Sandbox Code Playgroud)
现在,当我检查它时,它确实创建了一个新实例。
>>>m_pro_set
[<ProfilePicture: pro_mik>,<ProfilePicture: bg_mik>]
Run Code Online (Sandbox Code Playgroud)
但是,如果我检查路径,甚至检查媒体文件夹,它的图像都是相同的,而不是图像文件的实际副本。
>>>profile_pic.image
<ImageFileField: uploaded_files/1389904144_ken.jpg>
>>>m_back_1.image
<ImageFileField: uploaded_files/1389904144_ken.jpg>
Run Code Online (Sandbox Code Playgroud)
我该如何file在模型中实际复制原始图像?任何帮助都感激不尽!谢谢。
小智 6
所以我知道这个问题很老了,但是希望这个答案可以帮助某人...
我将照片上传到建议模型的正确路径的方法是:
from django.core.files.base import ContentFile
picture_copy = ContentFile(original_instance.image.read())
new_picture_name = original_instance.image.name.split("/")[-1]
new_instance.image.save(new_picture_name, picture_copy)
Run Code Online (Sandbox Code Playgroud)
在我的情况下,请检查新名称是否与文件名相同,但是要在新模型图像字段的路径中进行更新。在您的情况下,根据“ get_upload_file_name”中的内容,它可能再次导致相同的路径(因为两个类都使用了该路径)。您也可以创建一个新的随机名称。
希望这可以帮助某人=)
| 归档时间: |
|
| 查看次数: |
1380 次 |
| 最近记录: |