django의 model에서는 DB table의 column들에 대해 datatype을 지정한다.
그 뿐만 아니라 각각에 대해 Field option을 부여할 수 있다.
이 option들은 수 없이 많은 종류가 있으며, 그 중 사용해봤던 option들을 정리해본다.
출처 : Django official
True
/False
값을 선택, default는 False
이다.
공식 문서에서는 CharField
, TestField
등의 문자열 기반의 필드에서는 사용을 피하라고 되어있다.
(이는 '데이터 없음'과 빈 문자열의 두개의 가능한 값이 존재하기 때문이다.)
일반적으로 빈 값을 저장하기 위해서null=True
는 blank=True
와 같이 쓰인다.
True
/False
값을 선택, default는 False
이다.
null과 의미상으로는 유사하지만 null은 순수하게 DB와 관련 있는 반면, blank는 validation과 관계가 있다. blank=True
를 받으면 form validation은 빈 값을 허용한다. blank=False
일 경우에는 필드 값이 요구된다.
Field의 선택지로서 사용할 수 있는 순회할 수 있는 데이터로 구성된다.
(ex) [(A,B), (A,B) ...]
choices를 받으면, 기본적인 text field 대신 이 선택지들이 있는 select box의 형태로 model validation을 하도록 한다.
YEAR_IN_SCHOOL_CHOICES = [
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
]
위와 같은 choice 배열을 따로 정의해주어야 하고, 배열안의 tuple에서 앞의 값은 DB에 들어가는 값, 뒤의 값이 사람이 읽게되는 값이다.
field에 default 값을 부여한다.
dafault는 mutable한 객체는 받을 수 없다.(model instance나 list, set 등)
하지만, 원하는 default를 호출가능한 형태로 싸서 사용할 수 있다. (function의 형태로)
def contact_default():
return {"email": "to1@example.com"}
contact_info = JSONField("ContactInfo", default=contact_default)
True
/False
값을 선택, 해당 field를 model의 PK로 지정한다.
model에서 primary_key=True
가 지정되지 않으면 django는 자동으로 필드를 설정한다.
primary_key=True
는 null=True
와unique=True
암시한다.(내용을 자동으로 포함)
True
/False
값을 선택, True이면, table에서 반드시 고유한 값을 갖도록 한다.
model validation에 의해서 DB 단계에서 수행된다.
이 옵션은 ManyToManyField, OneToOneField를 제외한 모든 field에서 유효하다.
... 계속