2010-02-01 61 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 

这应该可以解决问题....