2010-02-01 101 views
0

我有一個Django應用程序,我使用的是postgres。我嘗試在我的測試一個執行bollowing行:Django的PostgreSQL問題

print BillingUser.objects.all() 

而且我得到以下錯誤:

"current transaction is aborted, commands ignored until end of transaction block."

我postresql日誌:

ERROR: duplicate key value violates unique constraint "billing_rental_wallet_id_key" 
STATEMENT: INSERT INTO "billing_rental" ("wallet_id", "item_id", "end_time", "time", "value", "index", "info") VALUES (61, 230, E'2010-02-11 11:01:01.092336', E'2010-02-01 11:01:01.092336', 10.0, 1, NULL) 
ERROR: current transaction is aborted, commands ignored until end of transaction block 
STATEMENT: INSERT INTO "billing_timeable" ("creation_date", "update_date") VALUES (E'2010-02-01 11:01:01.093504', E'2010-02-01 11:01:01.093531') 
ERROR: current transaction is aborted, commands ignored until end of transaction block 
STATEMENT: SELECT "billing_timeable"."id", "billing_timeable"."creation_date", "billing_timeable"."update_date", "billing_billinguser"."timeable_ptr_id", "billing_billinguser"."username", "billing_billinguser"."pin", "billing_billinguser"."sbox_id", "billing_billinguser"."parental_code", "billing_billinguser"."active" FROM "billing_billinguser" INNER JOIN "billing_timeable" ON ("billing_billinguser"."timeable_ptr_id" = "billing_timeable"."id") LIMIT 21 

我怎樣才能解決這個問題?

謝謝,Arshavski亞歷山大。

+0

你確定你沒有試圖插入這個打印線上方的某處嗎?你是否覆蓋了'BillingUser'類中的任何方法?更多的代碼將會非常有用。 – 2010-02-01 09:27:55

+0

我的tests.py在這裏:slexy.org/view/s21qJe144O我的models.py在這裏:slexy.org/view/s21EaSv1yu – alexarsh 2010-02-01 09:35:30

+0

在這行打印命令? – 2010-02-01 10:24:54

回答

0

您在某些測試功能中插入數據。無效插入數據庫連接處於失敗狀態後。您需要回滾事務或完全關閉它。請參閱transactionstesting them上的django文檔。

+0

謝謝,它解決了我的問題。你很棒! – alexarsh 2010-02-01 12:01:14

0

從日誌中看起來您嘗試插入帶有重複ID的項目,該項目會引發錯誤,並且代碼的其餘部分無法再訪問數據庫。修復該查詢,它應該工作。

+0

是的,但我只是打印。我不插入任何東西 – alexarsh 2010-02-01 09:24:52

+0

插入必須發生在打印行之前的某處。可能相當遠。 – 2010-02-01 09:28:09

+0

我的tests.py在這裏:http://slexy.org/view/s21qJe144O 我的models.py在這裏:http://slexy.org/view/s21EaSv1yu – alexarsh 2010-02-01 09:35:02

1

好吧......看着PostgreSQL的日誌,它看起來你正在做一個錯誤的插入,將中止事務......現在,看着你的代碼,我覺得問題就出在這裏:

在線78-81

currency = Currency.objects.all()[2] 
    if not Wallet.objects.filter(user=user): 
     wallet = Wallet(user=user, currency=currency) 
     wallet.save() 

您將創建一個錢包爲當前用戶,但隨後就行87-88您寫道:

user.wallet.amount = 12.0 
    user.wallet.save() 

然而,正如你節省錢包檢索用戶後,它不知道你已經爲他創建了一個錢包,並且有一對一的關係,這會導致你遇到的錯誤...我認爲你應該做的是在81後添加一行:

currency = Currency.objects.all()[2] 
    if not Wallet.objects.filter(user=user): 
     wallet = Wallet(user=user, currency=currency) 
     wallet.save() 
     user.wallet = wallet 

這應該可以解決問題....