De standaardmanier is om dit NIET aan te pakken, zoals:
- de kans op falen in uw geval is bijna 0;
- de ernst van de storing is erg laag.
Als u er om de een of andere reden zeker van moet zijn dat het probleem niet zal optreden, staat u er alleen voor.
Ik heb de volgorde van gebeurtenissen niet in detail geanalyseerd, maar ik denk dat het gebruik van het SERIALIZABLE-isolatieniveau niet echt zal helpen, het zal alleen IntegrityError
veroorzaken (of DatabaseError
) om op een andere plaats op te groeien.
Overschrijven van Model._perform_unique_checks
klinkt voor mij als een slecht idee, je kunt maar beter wegblijven van het patchen van apen indien mogelijk (en hier is het is mogelijk).
Wat betreft het gebruik van de tafelvergrendeling om onwaarschijnlijke fouten te voorkomen... Nou, ik ben geen grote fan, dus ik kan dat ook niet aanbevelen.
Hier is een aardig antwoord op een vergelijkbare vraag:https://stackoverflow.com/a/3523439/176186 - Ik ben het ermee eens dat het vangen van IntegrityError
en opnieuw proberen is waarschijnlijk de gemakkelijkste manier om het probleem op te lossen.
EDIT:ik heb dit gevonden:Symfony2 - hoe te herstellen van een unieke beperkingsfout na het indienen van een formulier? en ik ben het eens met het antwoord van @pid.