본문 바로가기
개발하면서적는글

[django] 공통 칼럼 모델 작성 하기

by 옥수수왕자 2022. 10. 3.

노마드코더 에어비앤비 클론코딩 의 내용을 다루고 있음 (광고 아님)

 

django 모델을 작성하다 보면 생성일(created date), 수정일(updated date) 등 공통 칼럼을 작성해야할 때가 있음

 

그럴 때 모델마다 매번 작성하는 게 아니라 공통 칼럼만 작성한 모델 작성 후 다른 모델에서 상속하는 유용한 방법이 있음

 

1. common 이라는 이름의 신규 app 생성

python manage.py startapp common

 

 

2. common app Model을 작성

from django.db import models

# Create your models here.
class CommonModel(models.Model):
    """Common Model Definition"""

    created_at = models.DateTimeField(
        auto_now_add=True,
    )
    updated_at = models.DateTimeField(
        auto_now=True,
    )

    class Meta:
        abstract = True

Meta 클래스에 abstract 를 True 로 하면 DB에는 Migration 이 되지 않고 다른 모델에서 상속을 받아 사용할 수 있도록 설정됨

 

 

3. 다른 모델에서 상속

 - common model 에서 CommonModel 클래스를 불러와

 - 기존에 models.Model 대신 CommonModel 을 상속하면 created_at, updated_at 을 사용할 수 있음

from django.db import models
from common.models import CommonModel

# Create your models here.


class Review(CommonModel):

    user = models.ForeignKey(
        "users.User",
        on_delete=models.CASCADE,
    )

    room = models.ForeignKey(
        "rooms.Room",
        on_delete=models.CASCADE,
        null=True,
        blank=True,
    )
    experience = models.ForeignKey(
        "experiences.Experience",
        on_delete=models.CASCADE,
        null=True,
        blank=True,
    )
    payload = models.TextField()
    rating = models.PositiveIntegerField()

    def __str__(self):
        return f"{self.user} / {self.rating}"

 

댓글