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/

相关文章:

python - 如何在Python中比较sql和json

python - 不同阶段有不同的 initial_data fixture(测试与生产)

Django Rest Framework - 如何从相关模型集中只获取一个字段

python - 在 Django 表中设置 AUTOINCREMENT 值

asp.net - Action 方法不适用于asp.net MVC中的[HttpPost]属性

Java - 使用文本区域将 JTable 设置为不可编辑

asp.net-mvc - 保存 IEnumerable 模型

python - 使用 re.sub 从文本中删除特定字符

python - 在Jupyter Notebook中第二次运行后无法调用'numpy.ndarray'对象

python - 内存高效的最近邻算法