초보 개발자

field옵션들, default, choices, blank, null 본문

Python/airbnb 클론

field옵션들, default, choices, blank, null

taehyeki 2022. 1. 22. 20:39

우리의 데이터가 이미 만개가 있다고 가정하고

새 필드(column)를 추가하려고한다. 이 때 옵션을 주어서 기존에 있던 값에 필드가 생기기 전에 있던 레코드에 데이터를 채워줄 것이다.

여기서 default=""인 것은 값을 ""로 채운 다는 뜻이고, null = True를 주면 기존에 있던 값은 비어있는 채로 있을 것이다

 

""" """ 이건 docstring이라는 뜻인데 이 클래스가 어떤 역할을 하는지 알려주는 것이다.

 

User에 마우스를 올려보면 우리가 적은 내용이 표시되는 것을 확인할 수 있다.

또 from . models import User 

form . 이건 현재의 파일과 같은 폴더 내에 있는

import models 이건 models를 불러온다. 이뜻이다.

 

우리는 User 모델에 프로필 사진을 추가할 수 있는 avatar와 성별을 나타내는 gender 필드를 추가할 것이다.

charfield는 max_length를 인자로 받는다.

bio의 textfield는 필수 인자가 없는 것 같다. 

ImageField는 필요한 인자가 많은 것 같다.

일단 makemigrations를 해보면 아래와 같은 오류가 뜬다.

ImageField를 사용하기 위해선 Pillow라는 모듈이 필요한 것 같다. 우리는 현재 가상환경 속이니까 pipenv 로 Pillow를 다운받아주자. 그리고 다시 makemigrations를 해보자.

우리는 avatar에 default값없이 만들어서 이러한 경고문이 뜨는 것이다. 

avatar에 null=True라고 추가해주고 다시 makemigrations를해주자

그럼 잘 추가가 되었고 migrate까지 진행시켜주자.

admin패널에 가보면 아래와 같이 잘 추가가 된 것을 확인할 수가 있다.

근데 gender에 male female만 들어와야하는데 abcd 이런게 들어올 수가 있다.

따라서 우리는 약간의 커스터마이징을 해주어야한다. choices를 통해서 아래와 같이 나타낼 수 있다.

상수를 만들어서 male female other를 만들고 튜플안에 튜플의 형태로 (데이터베이스에 담길 값, 보여질 값) 이런식으로 적어준다. 그리고 Charfield안에 choices에 그 튜플을 담아준다. 그럼 아래와 같이 나타난다.

이 경우 model을 수정했는데도 makemigrations 및 migrate를 하지 않아도 되었다.

그 이유는 데이터베이스에 직접 영향을 준 것이 아니라 form에 변화를 준 것이기 때문이라고 한다.

 

빈칸인 상태로 save를 눌러보면 아래와 같이 나온다.

 

우리는 avatar에 null값 True주었고, bio도 default=''주었고, gender도 null=True를 주었는데 왜 필수라고 나오는 걸까??

데이터는 form(값을 입력)을통해 데이터베이스로 가는 것이다.

따라서 우리가 준 옵션들은 데이터 베이스에 해당하는 옵션이고, ( 데이터 베이스에서 null=True가 적용, default='' )

form에서도 따라 빈칸이어도 된다는 걸 주어야한다. blank라는 옵션을 주어야 하고, 그 옵션은 form에서도 사용 가능하다.

 

따라서 아래와 같이 form에서 빈칸이어도 괜찮다는 옵션을 주고나서 

다시 빈칸인 채로 save를 눌르면 이번엔 잘 되는 것을 확인할 수 있다.

여기서 생일, 통화, 슈퍼호스트 유무인지 아닌지를 확인하는 필드를 추가하고 User model을 마무리해보자.

'Python > airbnb 클론' 카테고리의 다른 글

room model, 다대다 일대다 관계  (0) 2022.01.23
User admin패널 활용 및 User Model 완성  (0) 2022.01.23
first django startapp user  (0) 2022.01.20
Django app 계획 방법  (0) 2022.01.19
Django first migrate  (0) 2022.01.19