[Django]-Django: how can I tell if the post_save signal triggers on a new object?

97👍

Have a look at docs: https://docs.djangoproject.com/en/stable/ref/signals/#post-save

There is a created named argument which will be set to True if it’s a new object.

👤seler

30👍

As Docs stated and @seler pointed out, but with an example:

def keep_track_save(sender, instance, created, **kwargs):
    action = 'save' if created else 'update'
    save_duplicate((instance.id, instance.__class__.__name__, action))

post_save.connect(keep_track_save, sender=Group)

11👍

I just leave it here, maybe it’ll be helpful for someone.

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


class Deal(models.Model):
    name = models.CharField(max_length=255)


@receiver(post_save, sender=Deal)
def print_only_after_deal_created(sender, instance, created, **kwargs):
    if created:
        print(f'New deal with pk: {instance.pk} was created.')

Leave a comment