Je voudrais savoir si j'ai quelque chose comme ça:
def functionA():
with transaction.atomic():
#save something
functionB()
def functionB():
with transaction.atomic():
#save another thing
Quelqu'un sait ce qui va se passer? Si la fonction B échoue, la fonction A sera également annulée?
Je vous remercie!
Oui, il sera. Indépendamment de l'imbrication, si un bloc atomique est quitté par une exception il annulera :
Si le bloc de code est terminé avec succès, les modifications sont validées dans la base de données. S'il existe une exception, les modifications sont annulées.
Notez également qu'une exception dans un bloc externe entraînera la restauration du bloc interne et qu'une exception dans un bloc interne peut être interceptée pour empêcher le bloc externe de revenir en arrière. La documentation résout ces problèmes. (Ou voir ici pour une question de suivi plus complète sur les transactions imbriquées).