사진에 나온 코드는 고양이라는 데이터를 모델의 클래스 형태로 정의한 것이다
모델을 마이그레이션 하기 전에 settings.py 의 INSTALLED_APPS 리스트에 앱 이름을 추가해줘야한다
위 코드를 마이그레이션하면 장고에 연결된 DBMS에 SQL을 통해 cat 테이블이 생성된다
모델의 클래스를 만들때 클래스 이름은 단수형만 쓰는게 좋다
모델에서 가장 중요한 부분이다.
위 코드의 클래스 안의 name, weight_g 와 같은 변수를 모델의 fields라고 한다
각 필드는 각자의 속성을 가지며 해당되는 테이블의 컬럼과 같다.
Django에선 모델 클래스를 만들때 따로 필드에 id라는걸 넣지 않아도 자동으로 PK, auto-increment한 id 테이블(AutoField)을 만들어준다. 기본 설정이고 원하지 않는다면 바꿀 수 있다.
테이블의 컬럼에 들어갈 데이터의 유형과 테이블들간의 관계(1대1, 1대다, 다대다) 그리고 기타 다른 설정값들도 넣을 수 있다.
또한 서로다른 앱 간의 models.py에서 서로 자유롭게 import 할수있다.
주요 Field Types
주요 Relationship Types
모델 클래스 안의
class Meta:
db_table = 'drink_categories'
모델 클래스 안의 매직 메서드 정의
def __str__(self):
return self.name
이 코드를 넣으면 장고 shell에서 객체가 아니라 테이블의 name으로 표시된다 관리자 페이지를 사용한다면 관리자 페이지에서도 name이 뜨게 된다.
다음과 같이 모델 간 상속도 가능하다
from django.db import models
class CommonInfo(models.Model):
name = models.CharField(max_length=100)
age = models.PositiveIntegerField()
class Meta:
abstract = True
class Student(CommonInfo):
home_group = models.CharField(max_length=5)
필드옵션 : 필드마다 고유 옵션이 존재, 공통 적용 옵션도 있음
프로젝트를 시작하고 앱도 많이 만들다 보면 models.py 파일들을 관리하는게 어려울 수 있는데
최상단 폴더에 따로 models 폴더를만들고 그안에 __init__.py
파일을 만들어주고 앱 이름마다 모델파일을 만들어주고 __init__.py
파일에서 임포트하는 식으로 관리하면 좋다.
마찬가지로 views나 template 파일들도 비슷하게 관리할 수 있다.