728x90
반응형
image 수정하는 로직
* 아무것도 넣지 않거나, 기존 이미지 삭제하는 경우 default 이미지 있어야 함
* 변경하지 않고 저장하면 기존 이미지가 유지되어야 함 (수정 X, 삭제 X 인 경우)
javascript로 프리뷰로 이미지 변경
- 업로드하면 업로드 된 이미지
- 삭제하면 default 이미지
-> front에서 프리뷰 이미지 src가 default 이미지 경로로 잡혀 있으면 (.includes 등으로 확인)
is_default_image 속성을 true 로 건네기
- back에서는 is_default_image 값이 true로 들어오면 이미지 삭제 (또는 default 이미지 넣어주기)
-> 프리뷰 이미지 src가 default 이미지 경로가 아닌 경우! 수정을 한 경우와, 업로드 후에 수정을 하지 않은 경우로 나뉨
- backend에서 request.FILES.get("image") 가 None인지 아닌지 체크
1) 수정을 한 경우
값이 들어온다. 들어온 값으로 변경
2) 수정을 안한 경우
값이 None으로 들어온다. None일때는 아무런 동작 X (수정X, 삭제X)
* backend에서 실제로 파일을 저장할 때, file명이 고유해야 한다. 안 그러면 엄한 파일이 수정되고 삭제되는 경우가 생김
company_logo = request.FILES.get("company_logo") # 파일 받기
company.logo.delete() # 기존 파일 삭제
ext = str(company_logo).split(".")[-1] # 확장자 별도 분리
image_name = f'{company.id}.{ext}' # 고유한 값으로 변경
company.logo = company_logo # DB 저장 (파일도 같이 저장됨)
company.logo.name = image_name # 저장된 파일의을 변경해준 이름으로 바꿔줌
728x90
반응형
'Python > Django' 카테고리의 다른 글
Django Template: linebreaks vs linebreaksbr (0) | 2023.03.07 |
---|---|
Django QuerySet, update objects (0) | 2023.02.26 |
Django DateField, HTML input type date (0) | 2023.02.22 |
Django admin: Register all models # Django admin page에 모든 모델 등록 (0) | 2023.02.19 |
Django not null CharField objects.create # not null 임에도 object가 생성되는 경우 # unpack # ** (0) | 2023.02.16 |