주로 사용하는 Model Field
string type
- CharField
- string의 최대 길이 값을 알 수 있을 때 사용
- indexing이 필요한 경우
- 성별, 나이 등 선택이 제한되어 있는 경우 Choices를 이용하는 것이 좋다
max_length
를 지정해야한다
- TextField
- string의 최대 길이 값을 예측할 수 없을 때 (게시물 내용 등)
- 유의 사항
null=True
인 경우 DB단에 None과 빈 문자열이 모두 허용된다.
integer type
- IntegerField
- PositiveIntegerField
- 정수를 저장하지만, DB단에서 자연수와 0만을 허용하고 싶을 때
float type
date(time) type
- DateField
- python의
datetime.date
형태를 저장
- DateTimeField
primary key type
- AutoField
- 자동으로 1씩 증가하는 정수값을 생성하고 저장
- UUIDField
- uuid값을 저장하기 위함
- option으로 uuid생성 함수를 callback 함수로 포함
slug, url, ...
- SlugField
- CharField이지만 slug 형태에 대한 validation이 적용됨
- URLField
- CharField이지만 email 형태에 대한 validation이 적용됨
- ForeignKey
- Model의 여러 instance가 다른 Model의 한 instance를 참조하는 N:1관계에서 N에 해당하는 모델이 사용
- OneToOne
- A Model의 instance와 B Model의 instance가 1 대 1로 대응되어야 할 때
- e.g. User 모델과 Profile모델은 1 대 1 대응 관계인 경우가 많다
- ManyToMany
- 다대다 관계일 때 사용
- e.g. 학생과 수강하고 있는 강의 사이의 관계
on_delete
옵션으로 참조하는 모델이 삭제되는 경우 모델의 삭제, 수정, null 처리 등을 결정할 수 있다.
주로 사용하는 Model Field Option
null
blank
- form, drf 등에서 Null값에 대한 validation이 적용되는지 여부
unique
- DB 칼럼에 대해 유일성을 보장
- 두개 이상의 칼럼 조합에 대한 유일성은 Meta의 option 이용
default
- 값이 입력되지 않았을 때 사용할 기본값
- e.g. 기본 프로필 이미지
verbose_name
auto_now_add
- Date(Time)Field에서 레코드 생성시 현재 시간으로 자동 저장
- related field에서 역참조하고자 하는 모델에서 바라보는 이름