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. При этом также не возникает никаких ошибок. Как я могу это сделать?