장고 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
'파이썬 python > django' 카테고리의 다른 글
[django] annotate에 관하여... (0) | 2024.07.23 |
---|---|
[django] django template에서 settings.py variable불러오는 방법 (0) | 2024.05.09 |
[django] debug_toolbar 세팅 (0) | 2022.06.22 |
[django] Related Field got invalid lookup: icontains 오류 (0) | 2022.06.17 |
[django] User모델 커스터마이징 할 때 오류 (0) | 2022.06.14 |