django
[Django] Signals
sklass
2021. 9. 10. 23:59
django에서 모델이 delete되거나 save 되기전에 다른일을 처리하고 싶은 경우가 있습니다.
이런경우 django의 signals를 사용하면 됩니다.
사용법은 간단합니다. Project라는 모델이 지워지거나 저장될때 signal을 사용하고 싶다면 우선 Project 어플리케이션 폴더로 이동 후에, 그 안에 signals.py라는 파일을 만들 아래와 같이 경우에 맞춰서 코드해주면됩니다.
delete 하기전에 무언가를 하고싶은 경우,
from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver
from .models import Project
@receiver(pre_delete, sender=Project)
def project_before_delete(instance, **kwargs):
...
위에서 sender=Project는, Project라는 Model이 지워질때만, 해당 receiver가 작동하게끔하는것입니다.
save 하기전에 무언가를 하고싶은 경우,
from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import Project
@receiver(pre_save, sender=Project)
def my_handler(sender, **kwargs):
...
여기서 delete이나 save는 script내에서 delete()이나 save()를 콜할때도 포함하지만 django admin site에서 save나 delete 버튼을 누를때에도 포합합니다.