使用Django 1.3與9.0的PostgreSQL,我有一個多步的對象創建函數/視圖,其中:創建Django transaction.commit_on_success - 提交仍然發生,儘管錯誤/異常,所以如何調試?
- 主要目的(曾經嘗試都MyModel.objects.create()和手動使用對象。 save()方法)和
- 然後建立m2m關係(它們必須跟隨主對象的創建,以便所述對象具有與之相關的id)。
其中一些關係可能會失敗,或者可能會出現其他問題,因此我需要整個函數以原子方式運行。我試過用transaction.commit_on_success修飾器包裝函數,以及嘗試使用commit_manually(並在函數結尾處設置提交點);但都不起作用。也就是說,即使稍後在函數中引發異常,也會創建主對象並將其保存在數據庫中。這使得數據庫處於不一致的狀態,以禮貌的態度。那麼,如何調試呢?我見過類似的問題,但是他們不得不使用MySQL,而這種破碎的交易不應該發生在Postgres上。 Django Trac從幾年前就有關這個問題的門票,但它們被認爲是固定/解決的。那裏的任何Djangonauts可以提供啓發嗎?
你能顯示一些代碼嗎? – 2011-12-20 19:31:11
@丹尼爾:不幸的是,不幸的是。如果您知道會干擾交易的事情,請告知,謝謝。 – limist 2011-12-20 20:38:42
我發現sqlite的commit_on_success有時會引入奇怪的行爲,並發現commit_manually無法按預期工作。不要顯示一些有影響的代碼,並顯示一些錯誤或測試案例來證明這一點 - 沒有你不會在這裏得到答案,或讓django開發者認真對待它。 – Marcin 2011-12-20 23:35:07