반응형
DB에 있는 요 모델의 메소드를 내 맘대로 바꿔보자
from django.db import models
docs.djangoproject.com/en/3.1/topics/db/models/#overriding-predefined-model-methods
docs를 참고해보면 save()와 delete()를 오버라이딩 할 수 있다고 한다.
내 모델 Class에서 save 메소드를 만들고 self에 있는 값을 찍어보면
이미 저장된 값이 아니라 바뀌는 내용을 출력함
def save(self, *args, **kwargs):
print(self.city)
super().save(*args, **kwargs)
그래서 city를 저장하기 전에 앞글자를 대문자로 바꿔주는 등 내가 하고싶은 작업을 끼워넣을 수 있당
def save(self, *args, **kwargs):
self.city = self.city.capitalize()
super().save(*args, **kwargs)
모델 뿐만 아니라 Admin도 save를 오버라이딩 할 수 있다!
save_model()이란 걸 쓰면 되는 듯.
무시무시한 워닝을 살펴보니 오버라이딩 하면 object를 저장하는 코드도 만들어야 하나봄.
DB에서 쓴 것 처럼 super를 상속 받아서 실행하게 해도 될듯
Warning
When overriding ModelAdmin.save_model() and ModelAdmin.delete_model(), your code must save/delete the object. They aren’t meant for veto purposes, rather they allow you to perform extra operations.
docs.djangoproject.com/en/3.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model
def save_model(self, request, obj, form, change):
print(change)
super().save_model(request, obj, form, change)
그리고 super.save_model()을 부르면 Model의 save()를 사용해서 object를 저장한다
=> Admin에서 save 버튼 누름 -> Model에 실제로 저장한다는 말인듯
Call super().save_model() to save the object using Model.save().
Admin의 save_model의 정의 부분을 가니까... 띠용??
그냥 모델의 save() 함수만 부르고 끝난다...
def save_model(self, request, obj, form, change):
"""
Given a model instance save it to the database.
"""
obj.save()
'개발 > AWS' 카테고리의 다른 글
Django 앱 만들기 - DB에 저장된 내용을 보여주자! (0) | 2021.02.04 |
---|---|
Django 앱 만들기 - 모델 테스트 데이터를 자동으로 만들기 (0) | 2021.02.02 |
Django 앱 만들기 - Models method, upload image (0) | 2021.01.21 |
Django 앱 만들기 - admin 패널 꾸미기, QuerySet, UserManager (0) | 2021.01.21 |
AWS 솔루션 (0) | 2021.01.20 |
댓글