"2. 장고 모델 필드 & 제약조건"의 두 판 사이의 차이
(→옵션) |
|||
88번째 줄: | 88번째 줄: | ||
|- | |- | ||
|modles.ManyToManyField | |modles.ManyToManyField | ||
+ | many to many 연결 | ||
|N:N연결. 한 게시물에 여러 추천자가 올라오는 등의 추천 구현 등에서 사용한다. | |N:N연결. 한 게시물에 여러 추천자가 올라오는 등의 추천 구현 등에서 사용한다. | ||
연결한 모델이 하위, 연결당한 모델이 상위모델처럼 쓰인다. | 연결한 모델이 하위, 연결당한 모델이 상위모델처럼 쓰인다. |
2022년 9월 28일 (수) 11:34 판
1 개요
모델이 품을 데이터 형식을 지정한다.
폼 등의 사용해서 자동화에 도움을 준다.
2 필드
데이터를 저장할 테이블을 디자인해야 하는데, 테이블의 속성에 대한 제약은 모델의 필드에서 만들어준다.
2.1 텍스트 관련
내용 | 설명 | 옵션 | ||||
---|---|---|---|---|---|---|
models.CharField | 텍스트 필드.
(글자제한을 위해) |
| ||||
models.TextField | 텍스트 필드.
(글자제한 없음) |
2.2 숫자 관련
내용 | 설명 | 옵션 |
---|---|---|
models.IntegerField | 숫자담기 | -2147483648 부터 2147483647 까지 정수를 지원한다. |
FloatField | 부동소수점 |
2.3 시간 관련
내용 | 설명 | 옵션 | ||||||
---|---|---|---|---|---|---|---|---|
models.DateTimeField | 시간담기 |
|
이외 내용은 장고 공식 메뉴얼의 필드 레퍼런스를 참조. https://docs.djangoproject.com/en/3.1/ref/models/fields/#db-index
2.4 타 모델과 연결하는 필드
연결하려는 쪽에서 사용해주면 된다.
외부모델을 연결한다든가 다양한 상황이 생길 수 있다. 이때 외부모델을 임포트해와야 하는데, 다음과 같은 형식으로 불러온 후 사용한다.
from 앱이름.models import 모델명
형식으로 임포트 해서 사용할 수 있다.- 타 모델과 연결할 땐 텍스트타입이 아니라, 모델 자체를 넣는다.
내용 | 설명 | 옵션 |
---|---|---|
models.ForeignKey | 외래키를 사용함. N:1 연결.
상위에 연결된 모델에선 자동으로 view에선 template에선 상위모델만 받아도 하위객체를 불러다 쓸 때 다시 같은 방법으로 더 하위객체를 불러올 수 있다. |
속성=models.ForeignKey(외래모델) |
modles.ManyToManyField
many to many 연결 |
N:N연결. 한 게시물에 여러 추천자가 올라오는 등의 추천 구현 등에서 사용한다.
연결한 모델이 하위, 연결당한 모델이 상위모델처럼 쓰인다.
|
속성=models.ManyToManyField(외래모델) |
models.OneToOneField | 1:1 연결. 불러오면 할당된 객체를 반환한다. 프로필 확장 등에서 사용. | 속성=models.OneToOneField(외래모델) |
2.4.1 models.ForeingKey
외부객체와 연결하기 위한 필드. 일반적으로 외부 모델에 대한 하위모델을 지정할 때 사용한다.
내용 | 설명 |
---|---|
필드명 = models.ForeignKey | 필드명 속성을 외부의 객체로 둔다는 의미. |
자기참조를하기 위한 방법. 'self'를 넣어 구성하면 된다.
connected_username = models.ForeignKey('self', on_delete=models.CASCADE)
2.4.1.1 옵션
외래키, 1:1 연결에서 사용하는 옵션이다.
내용 | 설명 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
어느 객체를 불러올 것인가. | models.ForeignKey(연결할모델명, 이외옵션) 형태로 작성한다. | ||||||||||||||
on_delete=models.세부옵션 | on_delete= 옵션이 필수로 지정되어야 함.
| ||||||||||||||
related_name='author_posting' |
2.4.1.2 사용예
댓글달기 | 댓글을 다는 기능을 구현하기 위해 댓글 테이블을 만들려면 기존 글에 대한 ForeignKey를 사용해야 한다. | class 댓글(models.Model):
기존글 = models.ForeignKey(기존모델, on_delete-models.CASCADE)
|
2.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'),
]
3 옵션
3.1 공통옵션(제약조건)
모든 필드 안에 들어가는 공통옵션
옵션 | 설명 |
---|---|
null | DB 자체와 관련된 옵션.
|
blank | Form과 관련된 옵션.(입력양식과 관련)
null과 유사하게 True를 넣으면 빈 칸으로 둘 수 있다.(폼의 입력에서 빈칸으로 둘 수 있다.) 이걸 쓰려면 null=True와 함께 써야만 한다. |
default | 값이 없을 때 무엇을 넣을지. |
help_text | 필드 입력 도움말. 폼 입력시 입력창 다음에 나타나는 메시지. |
3.2 특수 옵션
옵션 | 설명 |
---|---|
db_index | True를 넣으면 이 필드를 인덱스로 사용하겠다는 것. |
allow_unicode | True를 넣으면 영어 외의 값도 허용한다는 것. |