jazzband / django-polymorphic

Improved Django model inheritance with automatic downcasting

Home Page:https://django-polymorphic.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Instance attributes missing in post save signal triggered by loaddata

codot-fr opened this issue · comments

Hello,

I'm a bit lost. I have created a function to create a celery beat task on a post save signal for child objects of a polymorphic class. When the signal is triggered while django is running, all is working fine. However, when the signal is triggered while loading fixtures (manage.py loaddata), two weird issues arise:

1/ The id field and the pk field of the instance doesn't match
2/ field inherited from the parent polymorphic class aren't set (the name field)

Models:

class Endpoint(PolymorphicModel):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=250, verbose_name="Name")

class GenericSwitch(Endpoint):
    pass

class EXSwitch(GenericSwitch):
    def healthcheck(self):
        pass
@receiver(post_save)
def endpoint_saved_event(sender, instance, created, **kwargs):
    if created and hasattr(instance, 'healthcheck'):
        try:
            logger.info(msg={
                "message": f"Paramétrage automatique de la vérification de l'état de santé de {instance.name} ({instance.__class__}/{instance.id}/{instance.pk})"
            })

When triggered via loaddata, the name attribute is not retrieved and the pk/id fields do not match.

[2021-10-20 11:28:34][core.signals][INFO][None] ::: {'endpoint': {'name': '', 'id': 'f96e3d6e-dc93-4907-aab3-a257536c1282'}, 'message': "Paramétrage automatique de la vérification de l'état de santé de  (<class 'core.models.EXSwitch'>/f96e3d6e-dc93-4907-aab3-a257536c1282/dc04c0ba-a4bb-4704-a440-83329994caac)"}

When triggerd via regular instance create, the name attribute is retrieved and the pk/id fields match.

[2021-10-20 11:44:52][core.signals][INFO][e164139de3aa46a2b65ef34e77cb2acd] ::: {'endpoint': {'name': 'Stack test', 'id': 'ef2a01b3-9f76-49fd-b71d-4d523a483320'}, 'message': "Paramétrage automatique de la vérification de l'état de santé de Stack test (<class 'core.models.EXSwitch'>/ef2a01b3-9f76-49fd-b71d-4d523a483320/ef2a01b3-9f76-49fd-b71d-4d523a483320)"}

Any idea why polymorphic acts differently ?

Thanks.