Sometimes you need to fire off an action related to the current database
transaction, but only if the transaction successfully commits. Examples:
a Celery task, an email notification, or a cache invalidation.
Doing this correctly while accounting for savepoints that might be
individually rolled back, closed/dropped connections, and idiosyncrasies of
various databases, is non-trivial. Transaction signals just make it easier
to do it wrong.
django-transaction-hooks does the heavy lifting so you don't have to.
WWW: https://github.com/arljm/django-transaction-hooks/