1)

Post 모델에 ImageField 기입하고 Pillow 인스톨 진행

기본적으로 FileField의 모든 속성을 상속하는데 이미지 형태의 모델 인스턴스를 저장하기 위해서 height, width 속성을 지정할 수 있다. 그래도 역시 upload_to 부분이 가장 중요해 보인다.

django에서는 widget으로 html tag를 생성하는데 model이 form을 정의하고 form이 widget을 정의하는 순서라고 한다

ImageField는 ClearableFileInput을 widget으로 갖는다

upload_to는 디렉토리와 파일 이름을 설정할 수 있는데 두 값 모두 Storage 클래스의 save method로 넘겨진다.

/%Y/%m/%d로 표시한 경로 지정을 strftime 포맷이라고 하는데 이를 활용하면 파일들이 디렉토리를 직접 채우지 않고, MEDIA_ROOT에 생성된 문자열 값이 로컬의 파일 저장 위치만을 가리키게 된다고 한다.

2)

ImageField, FileField를 사용하려면 몇 가지 단계가 필요한데, 먼저 프로젝트 폴더의 settings.py에서 MEDIA_ROOT와 MEDIA_URL을 정의해준다.

MEDIA_URL은 media 파일에 접근할 때 필요하며, MEDIA_ROOT는 manage.py 파일이 있는 BASE_DIR을 기준으로 하위 디렉토리를 생성해서 media 파일을 저장한다. 실제 db에는 파일에 접근하는 경로가 저장된다.

os.path.join(BASE_DIR, 'media')

는 "/"를 붙여 concatenation된 값을 반환한다.

3)

사이즈 선택 옵션을 주기 위해서 ChoiceField를 사용했다. 해당 필드는 단독적으로 사용할 수는 없고, 먼저 이중 튜플을 생성하고 이를 CharField에서 choices라는 옵션으로 선택해야 한다.

4)

DateTimefField는 DateField와 마찬가지로 Python의 datetime을 사용하며, auto_now는 모델이 save 함수를 호출할 때마다 객체를 저장한다. auto_now_add는 이를 객체의 최초 생성 시 수행한다.

5)

CharField는 반드시 max_length를 지정해줘야 한다.

6)

모델의 makemigrations와 migrate 과정이 끝나면 admin.py에 등록해서 어드민 페이지에서 관리할 수 있다.

7)

"no such table" 에러가 발생했는데 migrate를 다시 진행해도 해결되지 않았고

python manage.py migrate --run-syncdb

명령어로 해결할 수 있었다. settings.py의 INSTALLED_APPS에 추가된 앱에 대한 테이블을 db 만들어주는 명령어라고 한다.

0개의 댓글