Ich habe ein Projekt mit Django REST Framework von einer 2.x-Version auf die letzte stabile Version (3.1.3) aktualisiert. Nachdem ich einige veraltete Verwendungen in meinen Serialisierern behoben habe, habe ich python manage.py test
ausgeführt, um sicherzustellen, dass nichts kaputt gegangen ist.
Alles funktioniert gut, mit Ausnahme einiger meiner Tests, bei denen ich (absichtlich) ungültige REST-Anforderungen teste. Zum Beispiel:
%Vor% Das Viewset erzeugt eine ORM-Abfrage wie MyEventModel.objects.get(user=request.user, pk=123)
, die offensichtlich eine 404-Ausnahme in DRF auslöst, da hier kein Objekt zurückgegeben werden sollte (ich weiß, es sollte eine 403 sein, um REST- zu sein) konform ...) . Aber das erhöht TransactionManagementError
:
Es sieht so aus, als ob eine meiner Middleware nach der Ansicht eine SQL-Abfrage durchführt und die Transaktion geschlossen hat von DRF, seit dem 3.1.3 . Das gewünschte Verhalten (z. B. ein 404 nicht gefunden) funktioniert mit dem 3.1.2 ...
Hat jemand eine Idee, wie ich den Rollback vermeiden könnte? Ist es ein Missverständnis in DRF?
Das sieht wie ein Fehler in DRF aus, der bereits behoben wurde. Wie Sie hier sehen können, haben sie den Code so geändert, dass er nur im atomaren Modus zurückrollt blockieren.
Da keine neuere Version veröffentlicht wurde, können Sie das gleiche Update auf Ihren installierten Code anwenden oder eine frühere Version verwenden, bis 3.1.3 ersetzt wurde.
Tags und Links django django-rest-framework sqltransaction