2. 장고 모델 필드 & 제약조건
둘러보기로 가기
검색하러 가기
1 개요
모델이 품을 데이터 형식을 지정한다.
폼 등의 사용해서 자동화에 도움을 준다.
2 공통옵션
모든 필드 안에 들어가는 공통옵션
옵션 | |
---|---|
null | null=True 의 옵션을 넣으면 해당 값이 비어있어도 된다는 의미. 디폴트는 False.
유니크 옵션과 함께 쓸 경우엔 항상 False로 두어야 한다. |
blank | null과 유사하게 True를 넣으면 빈 칸으로 둘 수 있다.(폼의 입력에서 빈칸으로 둘 수 있다.)
이걸 쓰려면 null=True와 함께 써야만 한다. |
default | 값이 없을 때 무엇을 넣을지. |
help_text | 필드 입력 도움말. 폼 입력시 입력창 다음에 나타나는 메시지. |
3 필드
3.1 타 모델과 연결하는 필드
연결하려는 쪽에서 사용해주면 된다.
내용 | 설명 | 옵션 |
---|---|---|
models.ForeignKey | 외래키를 사용함. N:1 연결.
상위에 연결된 모델에선 자동으로 view에선 template에선 상위모델만 받아도 하위객체를 불러다 쓸 때 다시 같은 방법으로 더 하위객체를 불러올 수 있다. |
속성=models.ForeignKey(외래모델) |
modles.ManyToManyField | N:N연결. 한 게시물에 여러 추천자가 올라오는 등의 추천 구현 등에서 사용한다. | 속성=models.ManyToManyField(외래모델) |
models.OneToOneField | 1:1 연결. 불러오면 할당된 객체를 반환한다. 프로필 확장 등에서 사용. | 속성=models.OneToOneField(외래모델) |
3.1.1 models.ForeingKey
외부객체와 연결하기 위한 필드. 일반적으로 외부 모델에 대한 하위모델을 지정할 때 사용한다.
내용 | 설명 |
---|---|
필드명 = models.ForeignKey | author속성을 외부의 객체를 불러온다는 의미. |
3.1.1.1 옵션
내용 | 설명 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
어느 객체를 불러올 것인가. | models.ForeignKey(모델명, 이외옵션) 형태로 모델을 import해서 넣는다. | ||||||||||||||
on_delete=models.세부옵션 | on_delete= 옵션이 필수로 지정되어야 함.
| ||||||||||||||
related_name='author_posting' |
3.2 텍스트 관련
내용 | 설명 | 옵션 | ||||
---|---|---|---|---|---|---|
models.CharField | 텍스트 필드.
(글자제한을 위해) |
| ||||
models.TextField | 텍스트 필드.
(글자제한 없음) |
3.3 숫자 관련
내용 | 설명 | 옵션 |
---|---|---|
models.IntegerField | 숫자담기 | -2147483648 부터 2147483647 까지 정수를 지원한다. |
3.4 시간 관련
내용 | 설명 | 옵션 | ||||
---|---|---|---|---|---|---|
models.DateTimeField | 시간담기 |
|
이외 내용은 장고 공식 메뉴얼의 필드 레퍼런스를 참조. https://docs.djangoproject.com/en/3.1/ref/models/fields/#db-index
3.5 선택모델 만들기
카테고리를 지정할 때 사용한다.
from django.db import models
class Student(models.Model):
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
GRADUATE = 'GR'
YEAR_IN_SCHOOL_CHOICES = [
('내부에서처리할텍스트', '사용자에게보여질텍스트'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
(GRADUATE, 'Graduate'),
]
year_in_school = models.CharField(max_length=2,
choices=YEAR_IN_SCHOOL_CHOICES,
default=SOPHOMORE,)
선택지를 그룹화기 위해선 다음과 같이 사용한다.
MEDIA_CHOICES = [
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
]