4👍
✅
You’ll need to copy the properties of one object to another object. create
is used when you want to create a new instance, not when you want to update a specific instance.
m_pro = m_pro_set[0] # m_pro_set is a list and need to get the specific instance
m_pro.image = m_back_1.image
m_pro.caption = m_back_1.caption
m_pro.pub_date = m_back_1.pub_date
m_pro.save()
Alternatively you can create a method on ProfilePicture
if this is a common operation to contain this functionality.
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)
def update(self, bg_img):
self.image = bg_img.image
self.caption = bg_img.caption
self.pub_date = bg_img.pub_date
self.save()
So you would just need to call m_pro_1.update(m_back_1)
if we wanted to make m_pro_1
have the same properties as m_back_1
Also, if you wanted to create a new instance, I’d suggest using a classmethod
like the following
class ProfilePicture(models.Model):
...
@classmethod
def create_from_bg(cls, bg_img):
img = cls(user=bg_img.user, image=bg_img.image, caption=bg_img.caption, pub_date=bg_img.pub_date)
img.save()
return img
@classmethod
def create_from_photo(cls, photo):
img = cls(user=photo.album.user, image=photo.image, caption=photo.caption, pub_date=photo.pub_date)
img.save()
return img
This creates a new ProfilePicture
and is used: profile_pic = ProfilePicture.create_from_bg(m_back_1)
Source:stackexchange.com