Django的。覆盖模型保存 [英] Django. Override save for model

查看:178
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆