728x90
반응형
스키마를 만들다 보면 중복되는 필드가 많은 부분이 생기기 마련이다. 이런 스키마들은 보통 공통의 스키마를 만들고 상속 받아서 사용하곤 한다. 장고에서 추상 모델을 만들고 상속해서 만드는 방법은 아래와 같다.
추상 모델
추상화 하고자 하는 모델의 메타 클래스에 아래와 같이 abstract = True 옵션을 추가하면 해당 모델은 추상 모델이 된다.
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True
class Meta:
abstract = True
추상 모델이 되었는지 확인하기 위해 옵션을 넣었을 때, 뺐을 때 마이그레이션을 수행하면 아래와 같은 화면을 볼 수 있다.
넣었을 때
뺐을 때
이렇게 모델이 추가되고 삭제되는 것을 볼 수 있다.
추상 모델 상속
추상화된 모델을 상속 받아 사용하는 것은 아래와 같다. managed는 실제 변경되는 모습을 보여주기 위해서 넣었다. 해당 옵션을 넣으면 실제로 디비 테이블 구조를 바꿔버리니 주의해야 한다.
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class FeedPost(Post):
tag_id = models.CharField(max_length=10)
class Meta:
managed = True
db_table = "feed_post"
class SupportPost(Post):
type = models.CharField(max_length=20)
class Meta:
managed = True
db_table = "support_post"
아래와 같이 테이블이 생성되는 것을 알 수 있다.
그리고 DBeaver로 확인해보면 실제로 테이블이 생성된 것을 확인할 수 있다.
728x90
반응형
'Backend > Django' 카테고리의 다른 글
Django restframework-simplejwt 로 jwt 인증 구현하기 (feat. Blacklist) (0) | 2024.03.17 |
---|---|
Django docker-compose 에서 로컬, 도커 환경 분리하기 (0) | 2024.03.16 |
Django 멀티 디비 설정 (0) | 2024.03.13 |
Django order_by와 annotate, extra 활용 (0) | 2024.03.13 |
Django queryset 파보기 (0) | 2024.03.12 |