바뀜

4,784 바이트 추가됨 ,  2021년 4월 1일 (목) 14:23
새 문서: ==개요== 모델이 품을 데이터 형식을 지정한다. 폼 등의 사용해서 자동화에 도움을 준다. ==공통옵션== 모든 필드 안에 들어가는 공통옵션 {...
==개요==
모델이 품을 데이터 형식을 지정한다.

폼 등의 사용해서 자동화에 도움을 준다.
==공통옵션==
모든 필드 안에 들어가는 공통옵션
{| class="wikitable"
|+
!옵션
!
|-
|null
|<code>null=True</code> 의 옵션을 넣으면 해당 값이 비어있어도 된다는 의미. 디폴트는 False.
유니크 옵션과 함께 쓸 경우엔 항상 False로 두어야 한다.
|-
|blank
|null과 유사하게 True를 넣으면 빈 칸으로 둘 수 있다.(폼의 입력에서 빈칸으로 둘 수 있다.)
이걸 쓰려면 null=True와 함께 써야만 한다.
|-
|default
|값이 없을 때 무엇을 넣을지.
|-
|help_text
|필드 입력 도움말. 폼 입력시 입력창 다음에 나타나는 메시지.
|}
==필드==
===테이블 관계를 나타내는 필드===
연결하려는 쪽에서 사용해주면 된다.
{| class="wikitable"
!내용
!설명
!옵션
|-
|models.ForeignKey
|외래키를 사용함. N:1 연결.
상위에 연결된 모델에선 자동으로 <code>하위모델명_set</code> 속성을 갖게 된다.

view에선 <code>상위모델.하위모델_set.all()</code>,

template에선 상위모델만 받아도 <code><nowiki>{{상위모델.하위모델_set.all}}</nowiki></code> 형태로 상위객체의 속성으로서 하위객체를 다 불러올 수 있다.

하위객체를 불러다 쓸 때 다시 같은 방법으로 더 하위객체를 불러올 수 있다.
|속성=models.ForeignKey(외래모델)
|-
|modles.ManyToManyField
|N:N연결. 한 게시물에 여러 추천자가 올라오는 등의 추천 구현 등에서 사용한다.
|속성=models.ManyToManyField(외래모델)
|-
|models.OneToOneField
|1:1 연결. 불러오면 할당된 객체를 반환한다. 프로필 확장 등에서 사용.
|속성=models.OneToOneField(외래모델)
|}
===models.ForeingKey===
외부객체와 연결하기 위한 필드. 일반적으로 외부 모델에 대한 하위모델을 지정할 때 사용한다.
{| class="wikitable"
!내용
!설명
|-
|필드명 = models.ForeignKey
|author속성을 외부의 객체를 불러온다는 의미.
|}
====옵션====
{| class="wikitable"
!내용
!설명
|-
|어느 객체를 불러올 것인가.
|models.ForeignKey(모델명, 이외옵션) 형태로 모델을 import해서 넣는다.
|-
|on_delete=models.세부옵션
|on_delete= 옵션이 필수로 지정되어야 함.
{| class="wikitable"
|+
!세부옵션
!설명
|-
|CASCADE
|외래모델이 지워지면 함께 지운다는 의미.
|-
|PROTECT
|하위 객체가 있으면 지워지지 않게 한다.(하위객체에서 설정)
|-
|SET_NULL
|상위 객체가 삭제되면 필드값을 null로 설정. 사용하려면 null=True 옵션을 함께 주어야 한다.
|-
|SET_DEFAULT
|상위 객체가 삭제되면 필드값을 기본값으로 변경.
|-
|SET()
|상위 객체가 삭제되면 괄호 안의 값으로 변경.
|-
|DO_NOTHING
|아무것도 하지 않음.
|}
|-
|related_name='author_posting'
|
|}
===텍스트 관련===
{| class="wikitable"
!내용
!설명
!옵션
|-
|models.CharField
|텍스트 필드.
(글자제한을 위해)
|
{| class="wikitable"
|+
!옵션
!설명
|-
|max_length=숫자
|필수옵션. 해당숫자만큼으로 제한한다.
|}
|-
|models.TextField
|텍스트 필드.
(글자제한 없음)
|
|}
===숫자 관련===
{| class="wikitable"
!내용
!설명
!옵션
|-
|models.IntegerField
|숫자담기
|<nowiki>-2147483648 부터 2147483647 까지 정수를 지원한다.</nowiki>
|}
===시간 관련===
{| class="wikitable"
!내용
!설명
!옵션
|-
|models.DateTimeField
|시간담기
|
{| class="wikitable"
!옵션
!설명
|-
|auto_now_add
|True인 경우, 객체 생성시 자동 입력
|}
|}이외 내용은 장고 공식 메뉴얼의 필드 레퍼런스를 참조. https://docs.djangoproject.com/en/3.1/ref/models/fields/#db-index
==선택모델 만들기==
카테고리를 지정할 때 사용한다.<syntaxhighlight lang="python">
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,)
</syntaxhighlight>선택지를 그룹화기 위해선 다음과 같이 사용한다.<syntaxhighlight lang="python">
MEDIA_CHOICES = [
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
]
</syntaxhighlight>