Проблема PostgreSQL в Джанго - PullRequest
       2

Проблема PostgreSQL в Джанго

0 голосов
/ 01 февраля 2010

У меня есть приложение Django, и я использую postgres. Я пытаюсь выполнить следующую строку в одном из моих тестов:

print BillingUser.objects.all()

И я получаю следующую ошибку:

"текущая транзакция отменена, команды игнорируются до конца блока транзакции."

Мой журнал сообщений:

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

Как я могу это исправить?

Спасибо, Аршавский Александр.

Ответы [ 3 ]

1 голос
/ 07 февраля 2010

Ладно ... глядя на журнал 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

Это должно решить проблему ....

0 голосов
/ 01 февраля 2010

Вы вставляете данные в некоторые из ваших тестовых функций. После неправильной вставки соединения с БД находятся в состоянии сбоя. Вам необходимо откатить транзакцию или полностью ее отключить. См. Документы Django по транзакциям и их проверке .

0 голосов
/ 01 февраля 2010

Похоже, что из журнала вы пытаетесь вставить элемент с повторяющимся идентификатором, который выдает ошибку, а остальная часть вашего кода больше не может получить доступ к БД. Исправьте этот запрос, и он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...