わかりました、私はこれを理解したと思います。問題は、DjangoとPsycopg2の長年の問題にあります。基本的に、Psycopg2は自動的にBEGINステートメントをDBに発行します。ただし、Djangoがデータ変更が発生していないと判断した場合、トランザクションの終了時にCOMMITを発行しません。
この問題にはいくつかの解決策があります。
または、django.middleware.transaction.TransactionMiddlewareをミドルウェアクラスに追加するだけです。これにより、トランザクション内のすべてのリクエストがラップされます。これは、トランザクションで読み取り専用リクエストを不必要にラップすることも意味しますが、これは手っ取り早い解決策です。