3,613 바이트 추가됨
, 2021년 4월 1일 (목) 14:19
==개요==
데이터베이스에 데이터를 저장하고 조작하려면 SQL이 필요하지만, 그 도움 없이 파이썬 문법만으로 데이터를 처리할 수 있게 하는 도구.
테이블과 컬럼을 만들고 컬럼의 제약조건까지 결정한다.
==='''ORM(Object Relation Mapping)'''===
객체관계매핑. DB와 모델을 연결시켜 SQL을 사용하지 않고도 테이블을 조작한다.
===특징===
하나의 모델은 하나의 테이블에 매핑된다. 모델의 속성은 컬럼에 매핑된다. 모델을 정의하면 primarykey는 장고에서 자동으로 부여한다.(직접 지정할 수도 있다.)
==테이블 설계하기==
장고의 모델은 하나의 테이블에 매핑된다. 때문에 테이블을 어떤 방식으로 관리할지 청사진이 그려져야 한다.
컬럼명, 타입, 제약조건 등에 따라 테이블을 설계한다.
{| class="wikitable"
!컬럼명
!타입
!제약조건
!설명
|-
|이름
|integer
varchar
datetime
|NotNull
Autoincrement(자동증가속성)
PK(primary key)
FK(foreign key)
|용도 설명
|}
==정의==
애플리케이션 디렉토리의 model.py에서 정의한다.<syntaxhighlight lang="python">
class 모델명(models.Model): #이게 하나의 테이블이 된다.
속성=model.옵션(옵션)
</syntaxhighlight>
===테이블 디자인하기===
{| class="wikitable"
|+
!컬럼명
!타입
!제약조건
!설명
|-
|이름
|integer
varchar
datetime
|NotNull
Autoincrement(자동증가속성)
PK(primary key)
FK(foreign key)
|용도 설명
|-
|
|
|
|
|-
|
|
|
|
|}
{| class="wikitable"
|+
!
!설명
!형태
!
|-
|__str__
|객체를 문자열로 표현하기 위한 함수로, Admin페이지 등에서 테이블명을 표시하기 위해 쓰인다.
|<syntaxhighlight lang="python">
del __str__(self):
return self.객체이름 #객체이름엔 테이블의 이름으로 할 것을 넣어주면 된다.)
</syntaxhighlight>
|
|-
|
|
|
|
|-
|
|
|
|
|}
===테이블 등록, 수정하기===
{| class="wikitable"
|+
!과정
!설명
|-
|admin.py 수정
|테이블을 만들었다고 해서 admin페이지에 테이블이 바로 보이는 것은 아니다. admin.py에서<syntaxhighlight lang="python">
from 어플명.models import 테이블1, 테이블2, ..
admin.site.register(테이블1)
</syntaxhighlight>형태로 admin.py를 수정해주어야 한다.
|-
|DB 수정
|
*새로운 테이블명이 생긴 경우, python manage.py makemigration을 기입해주고,
*단순 변형이 가해진 경우 python manage.py migrate를 해준다.
|-
|
|
|}
==DB반영==
{| class="wikitable"
!과정
!방법
!비고
|-
|DB변경사항 반영
|python manage.py makemigrations
|DB 자체에 변형이 가해진다.
|-
|DB생성
|python manage.py migrate
|DB에 변경사항을 반영하라는 명령이다.
|}
==tip.==
{| class="wikitable"
|+
!
!
!
!
|-
|댓글달기
|댓글을 다는 기능을 구현하기 위해 댓글 테이블을 만들려면 기존 글에 대한 ForeignKey를 사용해야 한다.
on_delete-models.CASCADE 옵션은 기존 글이 사라질때 같이 사라지게 한다는 의미이다.
|<syntaxhighlight lang="python">
class 댓글(models.Model):
기존글 = models.ForeignKey(기존모델, on_delete-models.CASCADE)
</syntaxhighlight>
|
|-
|
|
|
|
|-
|
|
|
|
|}
==외부 모델 가져다 쓰기==
외부모델을 연결한다든가 다양한 상황이 생길 수 있다. 이때 외부모델을 임포트해와야 하는데, 다음과 같은 형식으로 불러온다.
from 앱이름.models import 모델명
위 형식으로 임포트 해서 사용할 수 있다.
[[분류:장고 모델]]