3번째 줄: |
3번째 줄: |
| | | |
| 폼 등의 사용해서 자동화에 도움을 준다. | | 폼 등의 사용해서 자동화에 도움을 준다. |
− | ==공통옵션== | + | =필드= |
− | 모든 필드 안에 들어가는 공통옵션
| + | 데이터를 저장할 테이블을 디자인해야 하는데, 테이블의 속성에 대한 제약은 모델의 필드에서 만들어준다. |
| + | |
| + | ==텍스트 관련== |
| + | {| class="wikitable" |
| + | !내용 |
| + | !설명 |
| + | !옵션 |
| + | |- |
| + | |models.CharField |
| + | |텍스트 필드. |
| + | (글자제한을 위해) |
| + | | |
| {| class="wikitable" | | {| class="wikitable" |
| |+ | | |+ |
| !옵션 | | !옵션 |
− | ! | + | !설명 |
| + | |- |
| + | |max_length=숫자 |
| + | |필수옵션. 해당숫자만큼으로 제한한다. |
| + | |} |
| + | |- |
| + | |models.TextField |
| + | |텍스트 필드. |
| + | (글자제한 없음) |
| + | | |
| + | |} |
| + | ==숫자 관련== |
| + | {| class="wikitable" |
| + | !내용 |
| + | !설명 |
| + | !옵션 |
| + | |- |
| + | |models.IntegerField |
| + | |숫자담기 |
| + | |<nowiki>-2147483648 부터 2147483647 까지 정수를 지원한다.</nowiki> |
| |- | | |- |
− | |null | + | |FloatField |
− | |<code>null=True</code> 의 옵션을 넣으면 해당 값이 비어있어도 된다는 의미. 디폴트는 False. | + | |부동소수점 |
− | 유니크 옵션과 함께 쓸 경우엔 항상 False로 두어야 한다.
| + | | |
| + | |} |
| + | ==시간 관련== |
| + | {| class="wikitable" |
| + | !내용 |
| + | !설명 |
| + | !옵션 |
| |- | | |- |
− | |blank | + | |models.DateTimeField |
− | |null과 유사하게 True를 넣으면 빈 칸으로 둘 수 있다.(폼의 입력에서 빈칸으로 둘 수 있다.) | + | |시간담기 |
− | 이걸 쓰려면 null=True와 함께 써야만 한다.
| + | | |
| + | {| class="wikitable" |
| + | !옵션 |
| + | !설명 |
| |- | | |- |
− | |default | + | |auto_now_add |
− | |값이 없을 때 무엇을 넣을지. | + | |True인 경우, 객체 생성시 자동 입력. 이후 다시 업데이트 하지 않는다. |
| |- | | |- |
− | |help_text | + | |auto_now |
− | |필드 입력 도움말. 폼 입력시 입력창 다음에 나타나는 메시지. | + | |게시글 수정시간 등을 남길 때 사용. 수정할 때마다 자동입력. |
| |} | | |} |
− | ==필드==
| + | |}이외 내용은 장고 공식 메뉴얼의 필드 레퍼런스를 참조. https://docs.djangoproject.com/en/3.1/ref/models/fields/#db-index |
− | ===테이블 관계를 나타내는 필드=== | + | ==타 모델과 연결하는 필드== |
| 연결하려는 쪽에서 사용해주면 된다. | | 연결하려는 쪽에서 사용해주면 된다. |
| + | |
| + | 외부모델을 연결한다든가 다양한 상황이 생길 수 있다. 이때 외부모델을 임포트해와야 하는데, 다음과 같은 형식으로 불러온 후 사용한다. |
| + | |
| + | * <code>from 앱이름.models import 모델명</code> 형식으로 임포트 해서 사용할 수 있다. |
| + | * 타 모델과 연결할 땐 텍스트타입이 아니라, 모델 자체를 넣는다.(같은 앱의 모델을 연결할 땐 텍스트타입으로 '모델명' 형태로 기입한다.) |
| {| class="wikitable" | | {| class="wikitable" |
| !내용 | | !내용 |
44번째 줄: |
88번째 줄: |
| |- | | |- |
| |modles.ManyToManyField | | |modles.ManyToManyField |
| + | many to many 연결 |
| |N:N연결. 한 게시물에 여러 추천자가 올라오는 등의 추천 구현 등에서 사용한다. | | |N:N연결. 한 게시물에 여러 추천자가 올라오는 등의 추천 구현 등에서 사용한다. |
| + | 연결한 모델이 하위, 연결당한 모델이 상위모델처럼 쓰인다. |
| + | |
| + | <code>연결한모델.상위모델.all()</code>로 연결한 상위모델을 불러올 수 있고, |
| + | |
| + | <code>상위모델.연결한모델_set.all()</code>로 어떤 모델이 자신에게 연결되었는지 볼 수 있다. |
| |속성=models.ManyToManyField(외래모델) | | |속성=models.ManyToManyField(외래모델) |
| |- | | |- |
58번째 줄: |
108번째 줄: |
| |- | | |- |
| |필드명 = models.ForeignKey | | |필드명 = models.ForeignKey |
− | |author속성을 외부의 객체를 불러온다는 의미. | + | |필드명 속성을 외부의 객체로 둔다는 의미. |
| |} | | |} |
| + | 자기참조를하기 위한 방법. 'self'를 넣어 구성하면 된다. |
| + | |
| + | <code>connected_username = models.ForeignKey('self', on_delete=models.CASCADE)</code> |
| + | |
| ====옵션==== | | ====옵션==== |
| + | 외래키, 1:1 연결에서 사용하는 옵션이다. |
| {| class="wikitable" | | {| class="wikitable" |
| !내용 | | !내용 |
66번째 줄: |
121번째 줄: |
| |- | | |- |
| |어느 객체를 불러올 것인가. | | |어느 객체를 불러올 것인가. |
− | |models.ForeignKey(모델명, 이외옵션) 형태로 모델을 import해서 넣는다. | + | |models.ForeignKey(연결할모델명, 이외옵션) 형태로 작성한다. |
| |- | | |- |
| |on_delete=models.세부옵션 | | |on_delete=models.세부옵션 |
76번째 줄: |
131번째 줄: |
| |- | | |- |
| |CASCADE | | |CASCADE |
− | |외래모델이 지워지면 함께 지운다는 의미. | + | |외래 모델이 지워지면 함께 지운다는 의미.(기존 글이 사라질 때 댓글이 같이 사라지게 한다) |
| |- | | |- |
| |PROTECT | | |PROTECT |
97번째 줄: |
152번째 줄: |
| | | | | |
| |} | | |} |
− | ===텍스트 관련=== | + | |
| + | ==== 사용예 ==== |
| {| class="wikitable" | | {| class="wikitable" |
− | !내용 | + | ! |
− | !설명 | + | ! |
− | !옵션 | + | ! |
| |- | | |- |
− | |models.CharField | + | |댓글달기 |
− | |텍스트 필드. | + | |댓글을 다는 기능을 구현하기 위해 댓글 테이블을 만들려면 기존 글에 대한 ForeignKey를 사용해야 한다. |
− | (글자제한을 위해)
| + | |<syntaxhighlight lang="python"> |
− | | | + | class 댓글(models.Model): |
− | {| class="wikitable"
| + | 기존글 = models.ForeignKey(기존모델, on_delete-models.CASCADE) |
− | |+
| + | </syntaxhighlight> |
− | !옵션
| |
− | !설명
| |
− | |-
| |
− | |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"> | | 카테고리를 지정할 때 사용한다.<syntaxhighlight lang="python"> |
182번째 줄: |
201번째 줄: |
| ] | | ] |
| </syntaxhighlight> | | </syntaxhighlight> |
| + | |
| + | = 옵션 = |
| + | |
| + | == 공통옵션(제약조건) == |
| + | 모든 필드 안에 들어가는 공통옵션 |
| + | {| class="wikitable" |
| + | !옵션 |
| + | !설명 |
| + | |- |
| + | |null |
| + | |DB 자체와 관련된 옵션. |
| + | <code>null=True</code> 의 옵션을 넣으면 해당 값이 비어있어도 된다는 의미. 디폴트는 False. |
| + | 유니크 옵션과 함께 쓸 경우엔 항상 False로 두어야 한다. |
| + | |- |
| + | |blank |
| + | |Form과 관련된 옵션.(입력양식과 관련) |
| + | null과 유사하게 True를 넣으면 빈 칸으로 둘 수 있다.(폼의 입력에서 빈칸으로 둘 수 있다.) |
| + | 이걸 쓰려면 null=True와 함께 써야만 한다. |
| + | |- |
| + | |default |
| + | |값이 없을 때 무엇을 넣을지. |
| + | |- |
| + | |help_text |
| + | |필드 입력 도움말. 폼 입력시 입력창 다음에 나타나는 메시지. |
| + | |} |
| + | |
| + | == 특수 옵션 == |
| + | {| class="wikitable" |
| + | !옵션 |
| + | !설명 |
| + | |- |
| + | |db_index |
| + | |True를 넣으면 이 필드를 인덱스로 사용하겠다는 것. |
| + | |- |
| + | |allow_unicode |
| + | |True를 넣으면 영어 외의 값도 허용한다는 것. |
| + | |} |
| [[분류:장고 모델]] | | [[분류:장고 모델]] |