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