Model Inheritance (모델 상속)
Django 에서 모델 상속은, 파이썬에서 일반적인 클래스 상속을 하는것과 거의 비슷하게 작동합니다.
다만, django 의 기본에는 충실해야 합니다. 이것이 의미하는것은, Django 모델 클래스들은 django.db.models.Model
의 서브 클래스가 되어야 한다는 이야기 입니다.
여러분들이 결정해야 할 사항은 아래와 같습니다.
- 부모 모델이 자신의 모델이 될지
- 부모 모델은 단지 공통된 정보를 가지고, 자식 모델들을 통해서만 정보가 보이게 하게 할지
이 개념을 쉽게 이해하기 위해서는, 파이썬에서 클래스의 상속 개념을 잘 알고 있어야 합니다.
Django 에서는 상속에 대한 3가지 스타일들이 존재 합니다.
- 보통은, 자식 모델들의 필드에 대해서 타이핑 하기 싫을때, 부모 클래스가 정보만 가지게끔 사용할수 있습니다. 이 클래스는 절대로 분리되서 사용될수 없습니다. 따라서,
Abstract base classes
들이 당신이 원하는것이 될겁니다. - 이미 존재하는 모델 (다른 어플리케이션에 있는 모델)을 상속을 받고 있고, 각 모델이 각자의 데이터베이스 테이블을 가지고 있다면,
Multi-table inheritance
를 사용할수 있습니다. - 모델 필드의 수정 없이, 모델의 파이썬 레벨 동작을 고치고 싶다면,
proxy models
를 사용하면 됩니다.
정리하자면,
Django 에서 모델 상속에 대해, 아래 3가지 스타일이 존재합니다.
1) Abstract base classes
2) Multi-table inheritance
3) Proxy models