Standardowym sposobem NIE jest zajęcie się tym, ponieważ:
- Prawdopodobieństwo niepowodzenia w Twoim przypadku jest bliskie 0;
- Powaga awarii jest bardzo niska.
Jeśli z jakiegoś powodu musisz mieć pewność, że problem się nie pojawi, jesteś zdany na siebie.
Nie analizowałem szczegółowo sekwencji zdarzeń, ale myślę, że użycie poziomu izolacji SERIALIZABLE tak naprawdę nie pomoże, spowoduje tylko IntegrityError
(lub DatabaseError
) do podniesienia w innym miejscu.
Zastępowanie Model._perform_unique_checks
brzmi dla mnie jak zły pomysł, lepiej trzymaj się z dala od małpich łatania, jeśli to możliwe (i oto jest możliwe).
Jeśli chodzi o używanie blokady stołu, aby zapobiec nieprawdopodobnym błędom... Cóż, nie jestem wielkim fanem, więc tego też nie mogę polecić.
Oto ładna odpowiedź na podobne pytanie:https://stackoverflow.com/a/3523439/176186 - Zgadzam się, łapiąc IntegrityError
a ponowna próba jest prawdopodobnie najłatwiejszym rozsądnym sposobem rozwiązania problemu.
EDYCJA:Znalazłem to:Symfony2 - jak naprawić błąd unikalnych ograniczeń po przesłaniu formularza? i zgadzam się z odpowiedzią @pid.