>  기사  >  백엔드 개발  >  이미지 크기 조정을 위해 Django 모델 저장을 재정의하는 경우

이미지 크기 조정을 위해 Django 모델 저장을 재정의하는 경우

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-22 21:09:03412검색

When to Override Django Model Saving for Image Resizing

특정 사례에 대한 Django 모델 저장 재정의

Django에서 모델의 save() 메서드는 데이터를 데이터베이스에 유지하는 역할을 합니다. 그러나 특정 기준에 따라 이 동작을 수정해야 하는 시나리오가 있습니다. 그러한 사례 중 하나는 이미지가 새로 추가되거나 업데이트될 때만 이미지 크기를 조정하는 것입니다.

문제:

이미지, 썸네일 및 설명 필드가 있는 모델에서 메인 이미지(이미지)를 생성하거나 수정하는 경우에만 썸네일(thumb)의 크기를 조정하여 저장해야 합니다. 설명 필드를 업데이트해도 이미지 크기 조정이 실행되어서는 안 됩니다.

해결책:

이를 달성하려면 확인하는 사용자 정의 속성을 사용하여 기본 save() 메서드를 재정의할 수 있습니다. 이미지 필드의 변경 사항:

<code class="python">class Model(model.Model):
    _image = models.ImageField(upload_to='folder')
    thumb = models.ImageField(upload_to='folder')
    description = models.CharField()

    def set_image(self, val):
        self._image = val
        self._image_changed = True

    def get_image(self):
        return self._image

    image = property(get_image, set_image)

    def save(self, *args, **kwargs):
        if getattr(self, '_image_changed', True):
            small = rescale_image(self.image, width=100, height=100)
            self.thumb = SimpleUploadedFile(name, small_pic)
        super(Model, self).save(*args, **kwargs)</code>

작동 방식:

  • set_image() 메서드는 _image 필드를 업데이트하고 _image_changed 플래그를 다음으로 설정합니다. 사실입니다.
  • get_image() 메서드는 _image 필드의 현재 값을 반환합니다.
  • image 속성은 set_image() 및 get_image() 메서드를 모두 래핑하여 일관된 인터페이스를 제공합니다.
  • 재정의된 save() 메서드에서는 _image_changed 플래그가 확인됩니다. True이면 이미지가 변경되거나 추가되었음을 의미합니다.
  • 이 경우 썸네일의 크기가 조정됩니다.
  • super() 메소드가 호출되어 모델을 데이터베이스에 저장합니다. 크기가 조정된 썸네일(필요한 경우) 및 업데이트된 설명.

위 내용은 이미지 크기 조정을 위해 Django 모델 저장을 재정의하는 경우의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.