12.4. Signals

12.4.1. Available signals

12.4.2. Model signals

  • django.db.models.signals.pre_init

  • django.db.models.signals.post_init

  • django.db.models.signals.pre_save

  • django.db.models.signals.post_save

  • django.db.models.signals.pre_delete

  • django.db.models.signals.post_delete

12.4.3. M2m relations

  • django.db.models.signals.m2m_changed

  • django.db.models.signals.class_prepared

12.4.4. Migrations

  • django.db.models.signals.pre_migrate

  • django.db.models.signals.post_migrate

12.4.5. Request

  • django.core.signals.request_started

  • django.core.signals.request_finished

  • django.core.signals.got_request_exception

12.4.6. Test

  • django.test.signals.setting_changed

  • django.test.signals.template_rendered

12.4.7. Database

  • django.db.backends.signals.connection_created

12.4.8. Examples

from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import MyModel


@receiver(pre_save, sender=MyModel)
def my_handler(sender, **kwargs):
    ...
from django.apps import AppConfig
from django.db.models.signals import post_migrate

def my_callback(sender, **kwargs):
    # Your specific logic here
    pass

class MyAppConfig(AppConfig):
    ...

    def ready(self):
        post_migrate.connect(my_callback, sender=self)