python - 覆盖 Django 中的一个字段的保存

标签 python django model django-models

这是我的模型.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/

相关文章:

python - 为什么这个 Django 匹配在 urls.py 中不起作用?

python - 惯用的 python - 属性或方法?

python - 值错误 : time data does not match format when parsing a date

python - 代码可读性的最佳标签大小

python - Keras 中的输出维度太多

tensorflow - keras 会自动使用 gpu 吗?

sql - 外键与中间表

python - 如何使用 Python 杀死休眠的 MySQL 连接?

python - 如何编写 setup.py 以包含 Git 存储库作为依赖项

python - Django 复杂查询