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

标签 python django model django-models

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

相关文章:

Django-guardian - 在哪里分配对象创建的默认权限

python - 可编辑的 QTableView 和 Pandas 不能正常工作

javascript - 将值设置为 Backbone.Model 中的折叠默认值

python - 为什么我收到错误 : "Error: Render_to_response not defined"; Django

python - 正确使用 PyQt 信号

python - 何时或为什么在 Python 中使用相对导入

python - Django 不在 Internet Explorer 中存储 session cookie

python - Tkinter:如何使用 OptionMenu 小部件调用函数?

Django + Postgresql -> 未处理的异常

backbone.js - 使用复合键时,Backbone 对更新执行 POST 而不是 PUT