2016-12-01 21 views
0

私はDjango PythonフレームワークとMySQL DBMSを使用しています。以下のスクリーンショットでDjangoモデルはリアルタイムでDBにデータを永続化しません

、Iが示すように、SurveyDraft.objects.create()を用いnew_survey_draftオブジェクトを作成することがsurveydraft DBテーブルに新たな行を作成しなければならないと仮定し、しかしとしてよスクリーンショットにも表示され、コードをデバッグした後、new_survey_draftオブジェクトはid = pk = 270で作成されましたが、右側の別のウィンドウに表示されるDBテーブルにはid = 270。オブジェクトのインスタンス化の後に呼び出さpublish_survey_draftにブレークポイントを設定しても

()は、私は、オブジェクトを返さSurveyDraft.objects.get(PK = 270)と呼ばれるが、それでもIDが存在しません= 270 DBテーブルにあります。

最後に、コードを再開してすべての定義から戻った後、行はid = 270のDBテーブルに正常に追加されました。

DjangoはリアルタイムでDBに保存せずにオブジェクトにデータを格納し、後で実行ポイントでデータをまとめて保存することは可能でしょうか?

私は何時間もこんなことで立ち往生していました。オンラインで役立つものは何も見つかりませんでした。この問題に関するアドバイスは本当にありがたいです。

enter image description here

+1

これはまさにトランザクションです。 –

+0

@DanielRosemanどういう意味ですか?どうぞお分かりですか? –

+0

私は自分で "取引"を意味するものを見つけました。以下は私の答えです。上記のあなたのコメントの代わりにコンセプトについて少し説明して、私の質問に投票してくださった方がはるかに役に立つと思います。 @DanielRosemanしかし、とにかく感謝します。 –

答えて

0

この問題に深く掘り後、私はちょうどアトミックと呼ばれる概念がありsettings.pyに真ATOMIC_REQUESTSを設定することで、私のDjangoプロジェクトで有効になっていますを要求していることがわかりました説明したDATABASES辞書の下でhere

このように動作します。ビュー関数を呼び出す前に、Djangoは トランザクションを開始します。応答が問題なく生成された場合は、Django がトランザクションをコミットします。ビューが例外を生成した場合、Django はトランザクションをロールバックします。

これは、成功した応答が返されると変更がDBにコミットされるだけなので、変更点がデータベース内でブレークポイントを使用してデバッグしていないためです。

関連する問題