YUYANE

Django / Model 메소드 오버라이딩 본문

Framework/DJANGO

Django / Model 메소드 오버라이딩

YUYA 2021. 2. 25. 11:14

model 메소드 오버라이딩

 

- 장고 model에는 데이터베이스 관련 작업을 담고 있는 메소드(아래 링크 참고)가 많은데, 원하는대로 커스터마이징이 가능하다.

  docs.djangoproject.com/en/3.1/ref/models/instances/#model-instance-methods

- 부모 클래스를 호출하는 super()*를 사용한다.

 

 

*super() 예시

 

- 부모 클래스 : Animal

- 자식 클래스 : Cat

class Animal():
    def __init__(self, name):
        self.name = name

    def say(self):
        print("나는 동물이에요.")


class Cat(Animal):

    def say(self):
        super().say()
        print("나는 고양이에요.")


cat = Cat("서당캣")
print(cat.name) 
# 서당캣
cat.say() 
# 나는 동물이에요.
# 나는 고양이에요.

 

 

Overriding Model.save() 

 

- 코드 사용 예시

자식 클래스(Blog)에서 부모 클래스(Model)의 메소드 save()를 오버라이딩한다.

오버라이딩 된 메소드 save() 안에서 부모클래스의 메소드 save()를 호출하고 있다.

from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def save(self, *args, **kwargs):
        do_something()
        super().save(*args, **kwargs)  # Call the "real" save() method.
        do_something_else()

 

 

 

참고

docs.djangoproject.com/en/3.1/topics/db/models/

Comments