Standardmåden er IKKE at håndtere dette, som:
- sandsynligheden for fejl i dit tilfælde er tæt på 0;
- alvorligheden af fejlen er meget lav.
Hvis du af en eller anden grund skal være sikker på, at problemet ikke opstår, er du alene.
Jeg har ikke analyseret rækkefølgen af hændelser i detaljer, men jeg tror, at brug af SERIALIZABLE isolationsniveauet ikke rigtig hjælper, det vil kun forårsage IntegrityError
(eller DatabaseError
) for at blive opdraget et andet sted.
Tilsidesættelse af Model._perform_unique_checks
Det lyder for mig som en dårlig idé, du må hellere holde dig væk fra abelapning, hvis det er muligt (og her er det muligt).
Hvad angår brugen af bordlåsen for at forhindre usandsynlige fejl... Nå, jeg er ikke en stor fan, så det kan jeg heller ikke anbefale.
Her er et godt svar på et lignende spørgsmål:https://stackoverflow.com/a/3523439/176186 - Jeg er enig i at fange IntegrityError
og at prøve igen er nok den nemmeste fornuftige måde at håndtere problemet på.
EDIT:Jeg fandt dette:Symfony2 - hvordan gendannes fra en unik begrænsningsfejl efter formularindsendelse? og jeg er enig i @pids svar.