Djangoのtransaction.atomicブロック内で次のコードを実行しています。DjangoセーブポイントロールバックでIntegrityエラーをキャッチすると、TransactionManagementErrorが発生します。
@transaction.atomic()
def test():
a.save()
sid = transaction.savepoint()
try:
b.save()
transaction.savepoint_commit(sid)
except IntegrityError as e:
transaction.savepoint_rollback(sid)
c.save()
このコードは私に次のエラーを与える -
TransactionManagementError
An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.
私は公式ドキュメントから次のリンクをたどっ。 https://docs.djangoproject.com/en/1.10/topics/db/transactions/#s-savepoint-rollback
私はここで何が欠けていますか?
EDIT: - stacktraceを追加しています。
File "/Users/vibhor/Documents/juggernaut/user-venv-new/lib/python2.7/site-packages/django/db/models/manager.py", line 122, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/vibhor/Documents/juggernaut/user-venv-new/lib/python2.7/site-packages/django/db/models/query.py", line 401, in create
obj.save(force_insert=True, using=self.db)
File "/Users/vibhor/Documents/juggernaut/user-persistence-service/books/models/books.py", line 243, in save
transaction.savepoint_rollback(sid)
File "/Users/vibhor/Documents/juggernaut/user-venv-new/lib/python2.7/site-packages/django/db/transaction.py", line 66, in savepoint_rollback
get_connection(using).savepoint_rollback(sid)
File "/Users/vibhor/Documents/juggernaut/user-venv-new/lib/python2.7/site-packages/django/db/backends/base/base.py", line 328, in savepoint_rollback
self._savepoint_rollback(sid)
File "/Users/vibhor/Documents/juggernaut/user-venv-new/lib/python2.7/site-packages/django/db/backends/base/base.py", line 288, in _savepoint_rollback
cursor.execute(self.ops.savepoint_rollback_sql(sid))
File "/Users/vibhor/Documents/juggernaut/user-venv-new/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/Users/vibhor/Documents/juggernaut/user-venv-new/lib/python2.7/site-packages/django/db/backends/utils.py", line 59, in execute
self.db.validate_no_broken_transaction()
File "/Users/vibhor/Documents/juggernaut/user-venv-new/lib/python2.7/site-packages/django/db/backends/base/base.py", line 429, in validate_no_broken_transaction
"An error occurred in the current transaction. You can't "
TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.
を確認してくださいあなたのポストに完全なエラー・トレースバックを追加してください!このようにして、どのコマンドが問題を引き起こしたかを知ることができます。 –