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()