I came across django-lifecycle. Can this also replace SQL Triggers ? Or is this mainly good for the common use-case of sending email(s) when a row gets updated ?
Not completely. It’s still not going to catch those cases where rows are inserted, updated, or deleted in bulk, where those operations don’t involve the individual models.
My take on it is that it’s a different way to define a signal handler.