Django를 통해 개발을 하다 보면 수많은 Model을 정의한다.
Model을 정의하다 보면 매번 같은 필드가 반복된다.
예를 들어 object가 생성될 경우 auto_now_add 되는 필드 등은 보통 모든 모델에 존재한다.
그렇다면 반복되는 코드들을 줄일 수 있는 방법이 있을까?
정답은 있다. 바로 상속을 통해 Model을 구현 가능하다.
아래 예제를 보겠다. 아래는 예시 모델이다.
class Model1(models.Model):
field_1 = models.CharField(max_length=10)
field_2 = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Model2(models.Model):
field_3 = models.CharField(max_length=15)
field_4 = models.CharField(max_length=20)
field_5 = models.CharField(max_length=25)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
두 모델을 보면 created_at Field와 updated_at Field가 반복되고 있다.
그렇다면 created_at과 updated_at을 가지고 있는 Model을 정의 후 상속 받으면 된다.
# 추상화로 모델 정의
class TimeModel(models.Model):
createdAt = models.DateTimeField(auto_now_add=True)
updatedAt = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Model1(TimeModel): #TimeModel 상속
field_1 = models.CharField(max_length=10)
field_2 = models.BooleanField(default=True)
class Model2(TimeModel): #TimeModel 상속
field_3 = models.CharField(max_length=15)
field_4 = models.CharField(max_length=20)
field_5 = models.CharField(max_length=25)
위와 같이 TimeModel이라는 이름으로 Model을 정희해준다. 이 경우에는 abstract = True를 선언함으로써,
Django에게 해당 Model이 Abstract Model임을 명시해준다.
Abstract Model의 경우에는 실제로 DB에 생성되지 않는다.
Model1과 Model2는 TimeModel을 상속 받았으므로 TimeModel에 존재하는 모든 필드를 공통으로 가지게 된다.
이렇게 추상화와 상속을 통해 반복되는 Field를 효율적으로 관리할 수 있다.
'Framework > Django & DRF' 카테고리의 다른 글
[Django] html에 static 파일 적용시키기 (css, js 등) (1) | 2025.01.27 |
---|---|
[Django] 국세청 사업자등록정보 진위확인 및 상태조회 API 사용법 ( + Postman) (0) | 2025.01.15 |
[Django] DRF 테스트 코드 작성하기 (TDD, tests.py) (1) | 2025.01.09 |
[Django & React] CORS의 모든 것 (5분 안에 해결하기) (0) | 2025.01.02 |
[Django] 초심자에게 발생하는 에러 : didn't return an HttpResponse object (0) | 2023.02.26 |