본문으로 바로가기
 

Models | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

There’s another set of model methods that encapsulate a bunch of database behavior that you’ll want to customize. In particular you’ll often want to change the way save() and delete() work.

 

 

여기서는 save()를 오버라이딩해보도록 하겠습니다. 

 

model을 통해 만들어지는 구체적인 model들은 전부가 predifined된 method인 save를 가지고 있을 것입니다. 이를 오버라이딩하기 위해서는 super()를 통해 가져와야 합니다.

 

공식 문서를 가져와 보면 다음과 같이 간단하게 처리할 수 있습니다.

 

model을 통해 만들어지는 구체적인 model들은 전부가 predifined된 method인 save를 가지고 있을 것입니다. 이를 오버라이딩하기 위해서는 super()를 통해 가져와야 합니다. 정말로 저장을 하게 만들고 싶을 때 super를 통해 기존에 정의된 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()

 

super()를 불러오지 않고 return 해서 저장을 팅겨내는 방식으로 작동하게끔 만들 수도 있습니다.

from django.db import models

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

    def save(self, *args, **kwargs):
        if self.name == "Yoko Ono's blog":
            return # Yoko shall never have her own blog!
        else:
            super().save(*args, **kwargs)  # Call the "real" save() method.

 


저는 다음과 같이 self.city를 저장 이전에 interception해서 조작한 후 저장해주었습니다. 이제 city는 첫 글자가 대문자화 되어서 저장됩니다. 

    def save(self, *args, **kwargs):
        self.city = str.capitalize(self.city)
        super().save(*args, **kwargs)

 

 

그런데, Model 뿐만 아니라 Admin 패널 또한 커스터마이징할 수 있습니다.

ModelAdmin methods에 있는 save_model, delete_model 등 등 종류가 많습니다.

 

 

The Django admin site | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

save_model을 예시로 보면, save_model은 해당 모델을 저장할 때마다 일어나는 메서드입니다.

 

# admin.py 에서 작성해야 하는 내용입니다.

def save_model(self, request, obj, form, change):
    # 모델을 저장하면 곧 바로 메일을 보내도록 세팅함
    send_mail()
    super().save_model(request, obj, form, change)

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체