Django: Menambahkan m2m melalui penyebab 'transaksi saat ini dibatalkan, perintah diabaikan hingga akhir blok transaksi'

Saya mencoba menambahkan hubungan m2m melalui tabel tembus dan, tiba-tiba, saya mengalami kesalahan berikut:

'transaksi saat ini dibatalkan, perintah diabaikan hingga akhir blok transaksi'

Ada 2 masalah aneh tentang ini. Yang pertama adalah, saya telah berhasil memigrasi/menyinkronkan semua aplikasi saya yang relevan. Yang kedua adalah model terkait dan model yang dimaksud (AddedFeature) berhasil disimpan ke dalam database meskipun terjadi kesalahan. Artinya, meskipun transaksi dibatalkan, instance AddedFeature disimpan ke DB.

http://dpaste.com/1357120/

Sekadar menegaskan kembali - menyegarkan DB saya dan melakukan migrasi ulang/sinkronisasi ulang tidak membantu menyelesaikan masalah.


person tsurantino    schedule 26.08.2013    source sumber
comment
Matikan debug_toolbar Anda dan lihat apakah itu mengubah pesan pengecualian.   -  person Maciej Gol    schedule 26.08.2013
comment
Itu berhasil! Saya tidak tahu mengapa dan bagaimana cara memperbaikinya.   -  person tsurantino    schedule 26.08.2013
comment
Itu karena bagian dari kode Anda yang berada di bawah manajemen transaksi menimbulkan pengecualian yang tidak Anda tangani (dengan memutar kembali transaksi ke titik penyimpanan) dan kemudian ketika middleware memproses respons, ia datang ke middleware Django_toolbar yang melakukan kueri sql selama transaksi yang telah dilakukan dibatalkan oleh kode Anda sehingga memunculkan pengecualian yang Anda alami. Itu kalimat yang panjang :O   -  person Maciej Gol    schedule 27.08.2013


Jawaban (1)


Cari masalah yang terjadi sebelum kesalahan ini. Kode Anda, atau kode yang Anda gunakan, mengabaikan kesalahan basis data. Jadi operasi selanjutnya gagal.

Anda perlu mencari di database dan/atau log aplikasi untuk menemukan masalah sebelumnya. Kemudian tentukan bagian mana dari kode aplikasi Anda yang menerima pengecualian database tanpa mencatatnya dan membatalkan transaksi.

Menyetel log_statement = 'all' di postgresql.conf dapat berguna untuk ini.

person Craig Ringer    schedule 27.08.2013