장고 ImageField 저장 오류 : 분명히 모델에 ImageField가 존재하고, form valid하고 다른 필드 데이터들은 save가 잘 되었는데 ImageField에만 데이터가 안 들어가는 경우를 보았습니다.
이 경우 어떤 해결책들이 있나 정리해보았습니다.
장고 ImageField 저장 오류 해결법
1. views에 받는 FILES 인자 미전달
form = CustomForm(request.POST, request.FILES)
와 같이 받아야하는데 form = CustomForm(request.POST)
만 받음
2. 파일 업로드 세팅
MEDIA_ROOT 및 MEDIA_URL 설정이 올바르게 설정되었는지, ImageField(upload_to)에 지정된 업로드 디렉터리가 Django 애플리케이션에서 쓸 수 있는지 확인
3. is_valid() 검사했는지
‘ImageField’와 관련된 유효성 검사 오류가 있는 경우 데이터가 저장되지 않습니다.
4. form enctype 속성 확인
적절한 form 처리 방법(POST 요청, enctype=”multipart/form-data”)을 사용하고 있고 파일 데이터가 요청에서 올바르게 추출되고 있는지 확인
5. 파일 권한 문제
upload_to’에 지정된 디렉터리에 Django 애플리케이션이 파일을 쓰는 데 필요한 권한이 있는지 확인
마치며
저는 1번이 문제였습니다. 분명 settings의 MEDIA 변수도 잘 설정했고, form is valid하고 form의 enctype도 철자 문제 없이 입력했는데….
오류도 내뿜지 않아서 뭐가 문제인지 조금 헤맸습니다..
처음으로 이미지를 받아오다 보니 놓쳤었네요…
request.FILES
… 다시는 잊지 못할 것 같습니다.
참고하면 좋은 글
장고 시작하기 1 : 장고 환경 구성하기
장고를 시작하기 위해서는 장고를 설치하고 장고만의 환경을 만들어줘야 합니다. 장고가 정상적으로 설치되고 환경 구성이 완료되면 장고 로켓 화면을 볼 수 있습니다
장고 시작하기 2 : startapp으로 app 추가
[장고 시작하기] 2 번째 시리즈 : 지난 시간에 Django 환경 세팅하는 것에 대해서 공부하고 정리해보았습니다. 이번에는 실제 장고로 웹 페이지를 구성하기 위해서 ‘startapp으로 app 추가’ 하는 법에 대해서 공부하고 정리해 보았습니다.
장고 시작하기 3. 장고 extend include 사용하여 template 관리
장고 extend, include : 각 페이지 마다 html을 만들 수 있지만 페이지가 조금만 늘어나도 html을 구조화해서 재사용하고 싶어집니다. 이를 구현하기 장고에서는 extend와 include 태그를 제공해줍니다.
장고 시작하기 4. 장고 화면 꾸미기 기초 (장고 static 파일 관리)
CSS, 글꼴, 이미지 파일, 자바스크립트 파일 등 웹 사이트를 꾸미기 위한 정적 파일들을 있습니다. Django에서는 이런 파일들을 static 디렉토리에서 관리합니다. 하지만 이 static 디렉토리가 자동으로 생성되지 않습니다.
장고 시작하기 5 : 서버와 클라이언트 데이터 주고받기
장고 기초에서의 제일 중요한 내용이 “서버와 클라이언트가 어떻게 데이터를 주고 받는지” 인 것 같습니다. GET은 URL 뒤에 ?쿼리 형식으로 데이터를 보내고, 작은 데이터를 서버로 보낼 때 사용합니다. POST는 INSERT, UPDATE 때 사용되며, 데이터가 BODY에서 전송됩니다.두 방식 모두 form 태그를 사용하는데요
장고 시작하기 6 : 장고 DTL 동적 페이지 구축을 위한 기본 문법 1
Django Template Language (DTL)은 동적 웹 페이지를 구축하기 위한 강력한 도구입니다. 이를 통해 개발자는 Django views에서 제공하는 데이터를 기반으로 HTML로 동적으로 렌더링되는 템플릿을 만들 수 있습니다.
장고 시작하기 7 : 장고 URL, variable routing, name 파라미터
“장고 URL”을 다루는 정말 편리한 기술들이 많습니다. 모르면 암호 같은 표기인데 알고 나면 너무 편리한 기능들인 거죠. 이런 기능들에는 Variable Routing과 Naming URL 패턴이 있습니다.
장고 시작하기 8 : 장고 Model 생성하기
“장고 Model”은 데이터베이스 테이블을 나타내는 Python 클래스입니다. 데이터베이스에 저장된 데이터의 구조와 동작을 정의할 수 있는거죠. 장고 Model의 장점은 데이터베이스에 구애 받지 않는다는 점 입니다.
장고 시작하기 9. 장고 ORM 개념, 장고 Shell에서 테스트하기
장고 ORM (Object-Relational Mapping)은 개발자가 Python 객체를 사용하여 데이터베이스와 상호 작용할 수 있게 해주는 기능으로, SQL 쿼리를 직접 작성하지 않아도 단순하게 DB 작업을 할 수 있게 만들어 줍니다.
장고 시작하기 10. 장고 CRUD
CRUD는 아시다시피 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)를 의미하며 데이터베이스의 데이터에 대해 수행할 수 있는 4가지 기본 작업을 나타내는데요. 이번 포스트에서는 장고 CRUD 는 어떻게 진행
장고 시작하기 12 : 장고 Form
Django의 Form 클래스는 HTML form과 관련된 태그들을 생성하고 웹 애플리케이션에서 해당 데이터를 처리하는 편리한 방법을 제공해줍니다. 사용자가 귀찮게 반복해서 작성해야 하는 HTML form 태그 부분을 장고에서 지원해 주는 거죠.