Django post_save preventing recursion without overriding model save()
you can use update instead of save in the signal handler
queryset.filter(pk=instance.pk).update(....)
Don't disconnect signals. If any new model of the same type is generated while the signal is disconnected the handler function won't be fired. Signals are global across Django and several requests can be running concurrently, making some fail while others run their post_save handler.
What you think about this solution?
@receiver(post_save, sender=Article)def generate_thumbnails(sender, instance=None, created=False, **kwargs): if not instance: return if hasattr(instance, '_dirty'): return do_something() try: instance._dirty = True instance.save() finally: del instance._dirty
You can also create decorator
def prevent_recursion(func): @wraps(func) def no_recursion(sender, instance=None, **kwargs): if not instance: return if hasattr(instance, '_dirty'): return func(sender, instance=instance, **kwargs) try: instance._dirty = True instance.save() finally: del instance._dirty return no_recursion@receiver(post_save, sender=Article)@prevent_recursiondef generate_thumbnails(sender, instance=None, created=False, **kwargs): do_something()