相关疑难解决方法(0)

Django:保存时,如何检查字段是否已更改?

在我的模型中,我有:

class Alias(MyBaseModel):
    remote_image = models.URLField(max_length=500, null=True, help_text="A URL that is downloaded and cached for the image. Only
 used when the alias is made")
    image = models.ImageField(upload_to='alias', default='alias-default.png', help_text="An image representing the alias")


    def save(self, *args, **kw):
        if (not self.image or self.image.name == 'alias-default.png') and self.remote_image :
            try :
                data = utils.fetch(self.remote_image)
                image = StringIO.StringIO(data)
                image = Image.open(image)
                buf = StringIO.StringIO()
                image.save(buf, format='PNG')
                self.image.save(hashlib.md5(self.string_id).hexdigest() + ".png", ContentFile(buf.getvalue()))
            except IOError :
                pass
Run Code Online (Sandbox Code Playgroud)

这首次remote_image变化很有效.

当有人修改remote_image了别名时,如何获取新图像?其次,是否有更好的方法来缓存远程图像?

django caching image django-models

273
推荐指数
13
解决办法
14万
查看次数

如何排除 Django models.Model.save() 中的字段

我有以下内容model,保存时根据以下内容计算hash_id字段pk

class MyTable(models.Model):
    something = models.CharField(max_length=255)
    reported = models.IntegerField(default=0, blank=True)
    hash_id = models.CharField(max_length=32, db_index=True, unique=True, blank=True)

    def save(self, *a, **kw):
        super().save(*a, **kw)
        self.hash_id = hash_fn(self.pk)
        super().save(*a, **kw)
Run Code Online (Sandbox Code Playgroud)

在我的其中一行中,我views有以下几行,它们应该将reported字段增加 1,但是reported由于重写的save方法而增加了 2 :

my_table_ins.reported = F('reported') + 1
my_table_ins.save()
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要以下内容:

    def save(self, *a, **kw):
        super().save(*a, exclude=['reported'], **kw)
        self.hash_id = hash_fn(self.pk)
        super().save(*a, **kw)
Run Code Online (Sandbox Code Playgroud)

django django-models python-3.x

4
推荐指数
2
解决办法
3275
查看次数

标签 统计

django ×2

django-models ×2

caching ×1

image ×1

python-3.x ×1