당신은 멋쟁이, 우리는 장고쟁이~

0%

Django Models 16편 - Model Inheritance

Model Inheritance (모델 상속)


Django 에서 모델 상속은, 파이썬에서 일반적인 클래스 상속을 하는것과 거의 비슷하게 작동합니다.


다만, django 의 기본에는 충실해야 합니다. 이것이 의미하는것은, Django 모델 클래스들은 django.db.models.Model 의 서브 클래스가 되어야 한다는 이야기 입니다.


여러분들이 결정해야 할 사항은 아래와 같습니다.


  1. 부모 모델이 자신의 모델이 될지
  2. 부모 모델은 단지 공통된 정보를 가지고, 자식 모델들을 통해서만 정보가 보이게 하게 할지

이 개념을 쉽게 이해하기 위해서는, 파이썬에서 클래스의 상속 개념을 잘 알고 있어야 합니다.



Django 에서는 상속에 대한 3가지 스타일들이 존재 합니다.


  1. 보통은, 자식 모델들의 필드에 대해서 타이핑 하기 싫을때, 부모 클래스가 정보만 가지게끔 사용할수 있습니다. 이 클래스는 절대로 분리되서 사용될수 없습니다. 따라서, Abstract base classes 들이 당신이 원하는것이 될겁니다.
  2. 이미 존재하는 모델 (다른 어플리케이션에 있는 모델)을 상속을 받고 있고, 각 모델이 각자의 데이터베이스 테이블을 가지고 있다면, Multi-table inheritance 를 사용할수 있습니다.
  3. 모델 필드의 수정 없이, 모델의 파이썬 레벨 동작을 고치고 싶다면, proxy models 를 사용하면 됩니다.


정리하자면,


Django 에서 모델 상속에 대해, 아래 3가지 스타일이 존재합니다.


1) Abstract base classes

2) Multi-table inheritance

3) Proxy models