모델은 장고 프로젝트의 토대가 되는 부분이다. 성급하게 장고 모델을 작성하게 되면 나중에 자신에게 고통거리가 되어 돌아오게 되거나 최악의 경우 해결방안을 선택해야 하는 경우를 야기하거나 기존 데이터가 충돌할 수 있다😂
앱 하나에 모델이 20개 이상 있다면 앱이 너무 많은 일을 하고 있다는 말이다. 크기가 작은 앱으로 분리하는 것을 고려해 보아야 한다.
장고는 세가지 모델 상속 방법을 제공한다. 추상화 기초 클래스(abstract base class), 멀티테이블 상속(multi-table ingeritance), 프락시 모델(proxy model)이다.
오직 상속받아 생성된 모델들의 테이블만 생성된다.
부모와 자식 모델에 대해서도 모두 테이블이 생성된다. OneToOneField는 부모와 자식간에 적용된다.
원래 모델에 대해서만 테이블이 생성된다.
모든 모델에서 created와 modified 타임스탬프 필드를 생성해 두는 것은 일반적이기 때문에 일일히 손으로 필드를 추가하기보다는 TimeStampedModel
을 만들어서 상속하는 방법으로 해결할 수 있다.
# core/models.py
from django.db import models
class TimeStampedModel(models.Model):
created_datetime = models.DateTimeField(auto_now_add=True)
modified_datetime = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
# flavors/models.py
from django.db import models
from core.models import TimeStampedModel
class Flavor(TimeStampedModel):
title = models.CharField(max_length=200)
abstract=True
를 선언함으로써 추상화 기초 클래스가 되어 장고에서 마이그레이션을 실행할 때 테이블이 생성되지 않는다.