Chciałbym, aby moje widoki Django były atomowe. Mam na myśli, jeśli istnieje 2 zapisy DB w widoku, chcę albo 0 zapisu, albo 2 zapisy.Jak działają żądania atomowe Django?
Na przykład:
def test_view(request):
''' A test view from views.py '''
MyClass.objects.create()
raise Exception("whatever")
MyClass.objects.create()
Co znalazłem w dokumentacji wydawało obiecująco:
Częstym sposobem obsługi transakcji w internecie jest owinąć każdą prośbę w transakcji. Ustaw ATOMIC_REQUESTS na wartość True w konfiguracji dla każdej bazy danych, dla której chcesz włączyć to zachowanie.
To działa tak. Przed wywołaniem funkcji widoku Django rozpoczyna transakcję . Jeśli odpowiedź zostanie wygenerowana bez problemów, transakcja zostanie zatwierdzona przez Django. Jeśli widok powoduje wyjątek, Django wycofuje transakcję.
Jednak nawet jeśli ustawić ATOMIC_REQUESTS = True
, gdy dzwoni test_view()
, pierwszy obiekt MojaKlasa jest tworzony! czego mi brakuje?
Uwaga: Używam Django 1.7
Gdzie ustawiłeś wartość "ATOMIC_REQUESTS"? Co to jest wartość "AUTOCOMMIT"? – koxt