Notice
Recent Posts
Link
Tags
- DI
- 프로그래머스
- static
- Docker
- 문자열
- ORM
- java
- spring boot
- mysql
- Django
- 스프링부트
- 데이터베이스
- string
- AWS
- sql
- 1차원 배열
- hibernate
- select
- spring
- SSL
- springboot
- spring mvc
- spring security 6
- PYTHON
- join
- 스프링
- nginx
- 자바
- @transactional
- jpa
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Archives
개발하는 자몽
[Django] BaseModel (Tracking Model) 본문
백엔드 개발을 하면 DB 테이블(또는 DB 엔티티)을 도메인 엔티티로 옮겨야 되는데, 이는
각 DB 테이블에는
BaseModel
1.
2.
3. 해당 파일에 아래와 같이 작성한다.
from django.db import models
# 모델 생성 시마다 유사한 필드를 적용해야할 때 BaseModel(Tracking Model) 사용
# 장고 모델 객체가 생성되거나 업데이트 될 때 등 대부분의 항목이 공통적으로 적용됨
# 모델 helper를 생성하여, 모델을 생성할 때 세부 정보를 한 번에 빠르게 추가할 수 있음
class BaseModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
# set up ordering by created_at descending
ordering = ('-created_at', )
🔹 abstract = True
- 해당 옵션이 적용된 모델은 실제로 존재하지 않는 가상의 클래스가 되어, DB 생성에 사용되지 않는다.
- 이러한 모델을 상속받은 자식 모델은 부모 필드의 속성과 함수를 물려받으며, 실체가 있는 DB 테이블이 된다.
- 이러한 특징으로 인하여
Abstract Base Class 는 공통된 정보들을 가진 모델 클래스들이 있을 때 유용하게 사용된다.
사용
이렇게 만들어진
from django.db import models
from authentication.models import User
from helpers.models import BaseModel
class Todo(BaseModel): # BaseModel 상속
title = models.CharField(max_length=255)
description = models.TextField()
is_complete = models.BooleanField(default=False)
owner = models.ForeignKey(to=User, on_delete=models.CASCADE)
def __str__(self):
return self.title
위와 같이 상속받은 후,
'Python > Django' 카테고리의 다른 글
[Django / TIL] ORM 쿼리 메서드 filter(), get() (0) | 2024.01.29 |
---|---|
[Django] Swagger를 이용한 API 문서화 (0) | 2024.01.20 |
[Django] 배포 환경에서 Nginx로 media file 제공하기 on Docker (0) | 2024.01.13 |
[Django] 환경변수 관리 (django-environ) (1) | 2024.01.06 |
[Django] 개발 환경 분리 (1) | 2023.12.30 |
Comments