Django的。覆盖模型保存 [英] Django. Override save for model
本文介绍了Django的。覆盖模型保存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
class Model(model.Model):
image = models.ImageField(upload_to ='folder')
thumb = models.ImageField(upload_to ='folder')
description = models.CharField )
def save(self,* args,** kwargs):
if self.image:
small = rescale_image(self.image,width = 100 ,height = 100)
self.image_small = SimpleUploadedFile(name,small_pic)
super(Model,self).save(* args,** kwargs)
只有当新图像加载或图像更新时,我才想重新缩放,但是在描述更新时不会重新缩放。
解决方案
有些想法:
class Model(model.Model):
_image = models.ImageField(upload_to ='folder')
thumb = models.ImageField(upload_to ='folder')
description = models.C harField()
def set_image(self,val):
self._image = val
self._image_changed = True
#或将整个逻辑在这里
small = rescale_image(self.image,width = 100,height = 100)
self.image_small = SimpleUploadedFile(name,small_pic)
def get_image(self)
return self._image
image = property(get_image,set_image)
#如果small_image在set_image
def save(
如果getattr(self,'_image_changed',True):
small = rescale_image(self.image,width = 100,height = 100)
(自我,* args,** kwargs) self.image_small = SimpleUploadedFile(name,small_pic)
super(Model,self).save(* args,** kwargs)
不知道是否会使用所有伪自动django工具(示例:ModelForm,contrib.admin等)。
Before saving model I'm re-size a picture. But how can I check if new picture added or just description updated, so I can skip rescaling every time the model is saved?
class Model(model.Model):
image=models.ImageField(upload_to='folder')
thumb=models.ImageField(upload_to='folder')
description=models.CharField()
def save(self, *args, **kwargs):
if self.image:
small=rescale_image(self.image,width=100,height=100)
self.image_small=SimpleUploadedFile(name,small_pic)
super(Model, self).save(*args, **kwargs)
I want to rescale only if new image loaded or image updated, but not when description updated.
解决方案
Some thoughts:
class Model(model.Model):
_image=models.ImageField(upload_to='folder')
thumb=models.ImageField(upload_to='folder')
description=models.CharField()
def set_image(self, val):
self._image = val
self._image_changed = True
# Or put whole logic in here
small = rescale_image(self.image,width=100,height=100)
self.image_small=SimpleUploadedFile(name,small_pic)
def get_image(self):
return self._image
image = property(get_image, set_image)
# this is not needed if small_image is created at set_image
def save(self, *args, **kwargs):
if getattr(self, '_image_changed', True):
small=rescale_image(self.image,width=100,height=100)
self.image_small=SimpleUploadedFile(name,small_pic)
super(Model, self).save(*args, **kwargs)
Not sure if it would play nice with all pseudo-auto django tools (Example: ModelForm, contrib.admin etc).
这篇关于Django的。覆盖模型保存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文