Django Сигналы: Создание экземпляров разных моделей, когда одна создается на основе поля boolean в модели отправителя

У меня есть три модели ProductOrService, Product и Service. У меня есть булево поле is_product в модели ProductOrService, которое говорит, что товар является товаром, если оно истинно, и услугой, если оно ложно. Я хочу автоматически создать экземпляр Product, если поле is_product равно True или автоматически создать экземпляр Service, если поле is_product равно False. Приведенный ниже код создает экземпляр Product, когда создается экземпляр ProductOrService с полем is_product, установленным в True. Но он не создает экземпляр Service, когда новый экземпляр ProductOrService создается с is_product, установленным в значение False.

models.py:

signals.py:


    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from .models import ProductOrService, Product, Service, Brand
    
    
    if ProductOrService.is_product:
        @receiver(post_save, sender=ProductOrService)
        def create_product(sender, instance, created, **kwargs):
            if created:
                Product.objects.create(product_or_service=instance, show_price=0, brand=Brand.objects.get(name='None'))
    
        @receiver(post_save, sender=ProductOrService)
        def save_product(sender, instance, **kwargs):
            instance.product.save()
    
    if not ProductOrService.is_product:
        @receiver(post_save, sender=ProductOrService)
        def create_service(sender, instance, created, **kwargs):
            if created:
                Service.objects.create(product_or_service=instance)
    
        @receiver(post_save, sender=ProductOrService)
        def save_service(sender, instance, **kwargs):
            instance.service.save()

apps.py


    from django.apps import AppConfig
    
    
    class InventoryConfig(AppConfig):
        default_auto_field = 'django.db.models.BigAutoField'
        name = 'inventory'
    
        def ready(self):
            import inventory.signals

При создании экземпляра ProductOrService с параметром is_product, установленным в True, автоматически создается новый экземпляр продукта. Но новый экземпляр услуги не создается автоматически, когда экземпляр ProductOrService создается с параметром is_product, установленным в False. При этом также не возникает никаких ошибок. Как я могу это сделать?

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