Django сигналы, как подключить к проекту?

Планирую дописать некоторый функционал для портала.

Идея заключается в том, что при создании сущности одной модели, автоматически создавались сущности другой модели при сохранении.

В настоящее время это реализовано через кастомный метод create(), который при создании модели проверяет наличие нужных сущностей в модели, валидирует и создает сущности для другой модели. Все запутано и не предоставляет гибкости в обслуживании такого кода.

Нашел вот такой референс: Signals.

Беглый осмотр доки дает понимание, что это то, что нужно.

Пcевдокод для понимания процесса

class ModelA(models.Model):
    field1 = ...
    field2 = ...
    field3 = ...
    
class ModelB(models.Model):
    field1 = ...
    field2 = ...
    field3 = ...

from django.dispatch import receiver
from django.db.models.signals import post_save
@receiver(post_save, sender=ModelA)
def create_model_b(sender, instance, created, **kwargs):
    if created:
        # здесь логика для создания ModelB

Вопрос: Как регистрировать сигналы в проект? Сигналы являются частью приложения и должны регистрироваться через конфигурационный файл?

Кладёте код сигналов в файлик signals.py в корень конкретного приложения. И в apps.py пропиcываете так:

# это есть по дефолту
class AuthAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'auth_app'

# это нужно дописать
    def ready(self):
        from . import signals

Ссылка на документацию для ready()

Вернуться на верх