Python Django中的PostgreSQL问题

Python Django中的PostgreSQL问题,python,sql,django,postgresql,Python,Sql,Django,Postgresql,我有一个Django应用程序,我正在使用postgres。我尝试在我的一个测试中执行系缆: print BillingUser.objects.all() 我得到以下错误: 当前事务被中止,在事务块结束之前忽略命令 我的postresql日志: ERROR: duplicate key value violates unique constraint "billing_rental_wallet_id_key" STATEMENT: INSERT INTO "billing_rental"

我有一个Django应用程序,我正在使用postgres。我尝试在我的一个测试中执行系缆:

print BillingUser.objects.all()
我得到以下错误:

当前事务被中止,在事务块结束之前忽略命令

我的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 Alexander。

从日志中可以看出,您正在尝试插入一个具有重复ID的项,该项会引发错误,并且您的其余代码无法再访问数据库。修复该查询,它应该可以工作。

在一些测试函数中插入数据。无效插入后,数据库连接处于失败状态。您需要回滚事务或完全关闭它。请参阅和上的django文档。

确定。。。查看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()
但是,当您在检索用户后保存钱包时,它不知道您已经为他创建了一个钱包,并且具有OneToOne关系,这将导致您出现错误。。。我认为您应该做的是在81之后添加一行:

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

这应该可以解决问题。…

您确定没有尝试在打印行上方插入内容吗?您是否覆盖了
BillingUser
类中的任何方法?更多代码将非常有用。My tests.py在这里:slerxy.org/view/s21qJe144O My models.py在这里:slerxy.org/view/s21easv1yu此打印命令在哪一行?插入必须发生在打印行之前的某个位置。可能很远。My tests.py在这里:My models.py在这里: