Standardsättet är att INTE hantera detta, som:
- sannolikheten för fel i ditt fall är nära 0;
- felets svårighetsgrad är mycket låg.
Om du av någon anledning måste vara säker på att problemet inte kommer att hända är du på egen hand.
Jag har inte analyserat händelseförloppet i detalj men jag tror att användningen av isoleringsnivån SERIALIZABLE inte riktigt hjälper, det kommer bara att orsaka IntegrityError
(eller DatabaseError
) att födas upp på en annan plats.
Åsidosätter Model._perform_unique_checks
låter för mig som en dålig idé, du bör hålla dig borta från appatchning om möjligt (och här är möjligt).
När det gäller att använda bordslåset för att förhindra osannolika fel... Tja, jag är inget stort fan så jag kan inte rekommendera det heller.
Här är ett bra svar på en liknande fråga:https://stackoverflow.com/a/3523439/176186 - Jag håller med om att fånga IntegrityError
och att försöka igen är förmodligen det enklaste sättet att hantera problemet.
EDIT:Jag hittade detta:Symfony2 - hur återställer man ett unikt begränsningsfel efter att formuläret skickats in? och jag håller med @pids svar.