我有 3 个模型。
class Picture(models.Model)
name = models.CharField(max_length=255)
image_field = models.ImageField(upload_to="foo/")
slug = models.SlugField()
[...]
class Size(models.Model):
name = models.CharField(max_length=255)
width = models.IntegerField()
height = models.IntegerField()
crop = models.BooleanField(default=True)
upscale = models.BooleanField(default=False)
def __unicode__(self):
return self.name
class Cache(models.Model):
size = models.ForeignKey('Size')
picture = models.ForeignKey('Picture')
image_field = models.ImageField(upload_to="picture/resize/")
我想按如下方式使用它们:首先生成图片对象。然后创建 Size 对象。对于每个大小和图片,都应该在需要时生成一个缓存对象。
我的问题是我不知道把代码放在哪里。它应该类似于(伪代码):
def get_cached_picture(Picture,Size):
try:
cacheObj = Cache.objects.get(picture=Picture, size=Size):
[.. use cacheObj ..]
except Cache.DoesNotExist:
[.. resize Picture according to Size, insert into cache, use it ..]
那么我在哪里可以插入此代码?我知道我可以在视图中做到这一点,但有没有办法将它嵌入到模型中?缓存永远不应该在管理员中填充,而是应该在需要缓存和图片之间的某种组合时生成。
这可能很容易做到,但我缺少谷歌的正确关键字。