Как повесить сигнал post_save на родительский не абстрактный класс, чтобы отлавливать сигнал создания объектов дочерних моделей?

Чтобы повесить сигнал post_save на родительский не абстрактный класс в Django и отлавливать сигнал создания объектов дочерних моделей, вам необходимо выполнить несколько шагов.

1. Импортируйте необходимые модули:

from django.db.models.signals import post_save
from django.dispatch import receiver

2. Создайте функцию-обработчик для сигнала, в которой будет выполняться нужная вам логика:

@receiver(post_save, parent_model)
def my_post_save_handler(sender, instance, created, **kwargs):
    # Ваша логика обработки сигнала

Замените parent_model и my_post_save_handler соответственно на родительскую модель, на которую вы хотите повесить сигнал, и название вашей функции-обработчика.

3. Зарегистрируйте функцию-обработчик внутри метода ready() вашего приложения, чтобы сигнал был привязан к правильной модели:

from django.apps import AppConfig

class YourAppConfig(AppConfig):
    name = 'your_app_name'

    def ready(self):
        from .models import ParentModel  # Импортируйте родительскую модель
        from .signals import my_post_save_handler  # Импортируйте функцию-обработчик
        post_save.connect(my_post_save_handler, sender=ParentModel)

Замените your_app_name на имя вашего приложения, а ParentModel на родительскую модель.

4. Создайте файл signals.py в вашем приложении и импортируйте его в YourAppConfig. Внутри этого файла разместите вашу функцию-обработчик и выполните необходимые импорты.

Теперь каждый раз, когда будет создан объект дочерней модели, сигнал post_save будет отлавливаться вашим обработчиком my_post_save_handler.