파이썬 python/django

[django] ImageField upload_to 동적 업로드(함수 사용)

Aytekin 2022. 6. 25. 22:58
728x90

장고 imagefield에서 image데이터를 업로드할 때 dynamic upload가 가능하다.

 

장고에서 사용자가 사용하는 폴더가 media라고 보통 정해놓는데 

이 media폴더에 이미지를 업로드할 때 이름을 따로 지정해주는 것을 dynamic upload라고 한다.

 

ImageField의 upload_to옵션은 이미지가 저장되는 경로를 넣어주는 옵션인데

여기에 함수를 만들어서 동적 업로드가 가능하게 할 수 있다.

 

# models.py

def image_upload_to(instance, filename):
    ext = filename.split('.')[-1] # 이미지 파일 형식 따오기
    return os.path.join(instance.UPLOAD_PATH, "%s.%s" % (uuid.uuid4(), ext))
    # 16자리의 고유한 아이디 생성-> uuid이용 


class Image(BaseModel):
    UPLOAD_PATH = 'user-upload'

    content = models.ForeignKey(Content, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=image_upload_to)

위 코드처럼 첫번째 인수에 instance, 두번째에 filename을 받아서 원하는 경로에 원하는 이름으로 저장할 수 있다. 

위의 코드의 경우엔 uuid를 사용해서 고유식별자 16자리를 자동으로 만들어주도록 코드를 짠 것이다.

 

이미지파일 동적 업로드 완료!

728x90