在我的模型中,我有:
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
了别名时,如何获取新图像?其次,是否有更好的方法来缓存远程图像?
我有以下模型:
class Project(models.Model):
name = models.CharField(max_length=200)
class Task(models.Model):
name = models.CharField(max_length=200)
project = models.ForeignKey('Project', on_delete=models.CASCADE,
related_name='tasks')
Run Code Online (Sandbox Code Playgroud)
我希望能够在创建过程中为任务选择项目,并在任务创建后禁止更改它。
如何Task.project
在创建期间可编辑但在数据库/模型级别更新期间不可编辑?
到目前为止的方法: