这是我的模型.py:
class College(models.Model):
name = models.CharField(unique=True, max_length=50,
help_text='Name of the college.'
)
slug = models.SlugField(unique=True)
description = models.TextField(blank = True)
image = models.ImageField(upload_to='site-media/media/college_images/',
default = 'site-media/media/college_images/default.jpeg'
)
user = models.ForeignKey(User)
def get_absolute_url(self):
return "/%s/" % self.slug
def create_thumbnail(self):
if not self.image:
return
THUMBNAIL_SIZE = (250,193)
image = Image.open(StringIO(self.image.read()))
thumb = ImageOps.fit(image, THUMBNAIL_SIZE, Image.ANTIALIAS)
temp_handle = StringIO()
thumb.convert('RGB').save(temp_handle, 'jpeg')
temp_handle.seek(0)
suf = SimpleUploadedFile(os.path.split(self.image.name)[-1],
temp_handle.read(), content_type='image/jpeg')
self.image.save('%s_college_.%s'%(os.path.splitext(suf.name)[0],'jpeg'), suf, save=False)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
self.create_thumbnail()
super(College, self).save(*args, **kwargs)
我已向用户提供了一个仅用于编辑描述的表单。当描述“POST”时,调用上面的“save()”方法。这样做的问题是每次都会用更大的名称一遍又一遍地创建缩略图。而且,以前的缩略图也不会从硬盘中删除。是否有可能,这种“缩略图”方法不会在每次编辑“描述”时被一遍又一遍地调用。
最佳答案
您可以检查您是否在请求邮寄时发送图像文件。为此,您需要使用一个参数请求调用您的保存 View ,例如:college.save(request)
def save(self, request=False, *args, **kwargs):
self.slug = slugify(self.name)
if request and request.FILES.get('image',False):
self.create_thumbnail()
super(College, self).save(*args, **kwargs)
或 您可以使用
区分您的保存和编辑if self.pk is not None
但如果您编辑图像,可能会产生问题。
因此,您可以选择如何使用它。
关于python - 覆盖 Django 中的一个字段的保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674086/