Cara standarnya adalah TIDAK menangani ini, seperti:
- probabilitas kegagalan dalam kasus Anda mendekati 0;
- tingkat keparahan kegagalan sangat rendah.
Jika, karena alasan tertentu, Anda harus yakin bahwa masalahnya tidak akan terjadi, Anda sendirian.
Saya belum menganalisis urutan kejadian secara detail tetapi saya pikir menggunakan tingkat isolasi SERIALIZABLE tidak akan terlalu membantu, itu hanya akan menyebabkan IntegrityError
(atau DatabaseError
) untuk dibesarkan di tempat yang berbeda.
Mengganti Model._perform_unique_checks
kedengarannya seperti ide yang buruk, Anda sebaiknya menjauh dari patching monyet jika memungkinkan (dan ini dia ini mungkin).
Adapun menggunakan kunci meja untuk mencegah kesalahan yang tidak mungkin terjadi... Yah, saya bukan penggemar berat jadi saya juga tidak bisa merekomendasikannya.
Inilah jawaban yang bagus untuk pertanyaan serupa:https://stackoverflow.com/a/3523439/176186 - Saya setuju bahwa menangkap IntegrityError
dan mencoba lagi mungkin merupakan cara termudah untuk mengatasi masalah tersebut.
EDIT:Saya menemukan ini:Symfony2 - bagaimana memulihkan dari kesalahan kendala unik setelah pengiriman formulir? dan saya setuju dengan jawaban @pid.