Python/Django

[Django] FileField/ImageField 파일 생성시 Overwrite하는 방법

S0PH1A 2019. 8. 19. 10:41
반응형

[Django] FileField/ImageField 파일 생성시 Overwrite하는 방법


Django ORM에서 파일 생성시 같은 이름이 이미 존재하는 경우 오버라이트(overwirte)하는 방법이다.
(기본적으로 이름이 이미 존재하는 경우 이름 뒤에 랜덤문자열을 붙여 unique한 이름이 생성된다.)


  • django file storage
    • 파일을 파일 저장 시스템에 저장하는 방법과 위치에 대한 결정.
    • 파일 시스템, 파일 열기 및 읽기 등과 같은 것을 실제로 이해하는 객체입니다.

이미 같은 이름이 존재하는 경우 이전 파일을 제거해주는 OverwriteStorage 클래스 생성한 후 field의 storage 옵션에 넣어준다.

# models.py
from django.db import models
from django.conf import settings
from django.core.files.storage import FileSystemStorage

class OverwriteStorage(FileSystemStorage):
    '''
    file 같은 이름 존재할 경우 overwrite
    '''
    def get_available_name(self, name, max_length=None):
        if self.exists(name):
            os.remove(os.path.join(settings.MEDIA_ROOT, name))
        return name

class User(Model):
    # ...
    image = models.ImageField(
        upload_to='static', storage=OverwriteStorage())



[참고]

반응형