[MODEL]class 상속

박민하·2022년 6월 25일
0

DJANGO

목록 보기
13/22
post-thumbnail

  파이썬 class에서 상속에 대해 배운 것을 이렇게 사용할 줄이야...
django는 세 가지 모델 상속 타입을 제공한다. python에서 상속이란 다른 class를 물려받는 행위를 말한다. 여기서도 하나의 상속 class를 만들어 두면 다른 class에서 중복 선언할 필요 없이 간단하게 코드를 물려받을 수 있다. 테이블마다 똑같은 필드를 가지고 있다면, 부모 model을 만들고 각 모델에 상속시키는게 관리하기도 쉽고 코드도 깔끔하다.

  상속으로 사용할 model은 기본 class는 django.db.models.Model을 상속받아야 한다.

1. Abstract Base Classes(추상 기본 클래스)

  추상을 기반으로 부모 class를 만든다. class Meta에 'abstract = True' 구문을 넣으면 하위 모델에 이 모델의 필드를 추가시킬 수 있다. migrate 시에 database table에 추가되지 않아 부모 class를 독립적으로 사용할 수는 없다.

migrate를 하면 users라는 table 하나가 만들어 진다. 이 table 안에는 email, password라는 필드 외에도 created_at, updated_at이라는 필드도 같이 만들어 진다.

2. Multi-table Inheritance(다중 테이블 상속)

  추상클래스 없이 상속한다. 부모와 자식 모델 모두 테이블이 생성되므로, 부모 객체로부터 자식 객체를 호출하는 것이 가능하다(parent.child). 부모와 자식 간에 OneToOneField가 자동으로 적용된다. 단, 자식 테이블에 대한 각 query에 대해 부모 테이블로의 join이 필요하여 그렇게 효율적인 상속 방법은 아니다.

3. Proxy Models(대리 모델)

  원래 모델에 대해서만 테이블이 생성된다. 원래 모델에 대리자를 만들어서 대리 모델의 인스턴스를 만들고 없애고 수정할 수 있고, 대리 모델이 데이터를 저장도 할 수 있다. 원본 모델을 변경하지 않고 프록시에서 기본 모델의 순서 또는 관리자 같은 것을 변경할 수 있는 것이다. 즉, proxy modles는 기존 모델에서 필요한 기능만 추가해야할 때 사용한다.

프록시 모델은 일반 모델처럼 선언하며 Django에게 meta class에서 proxy속성을 True로 설정하여 프록시 모델이라고 알려준다.


참고 사이트

django 공식문서
[guabva.log]장고에서 모델 이용하기

profile
backend developer 🐌

0개의 댓글