Django's get_or_create()
executes its save()
in an atomic block, and signals fired post_save are nested within that atomic block.
My workaround was to override the native get_or_create()
with my own version in a custom manager, without the transaction.atomic()
block.