1

モデルフォームを保存しようとしています。Django reurnsInternalError: current transaction is aborted, commands ignored until end of transaction block

これは、 Djangoによって生成されたINSERTsql-queryを実行する際の問題です。次のようになります。

INSERT INTO "myapp_mymodel" ("title", ...) VALUES ("Test", ...) RETURNING "catalog_ad"."id"; args=("title", ...)

PgAdminでこのクエリを実行しようとしました。このエラーが返されました:

ERROR:  syntax error at or near "args"

何が間違っている可能性がありますか?

UPD: InternalErrorのtracbackは次のとおりです。

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/<Path to my app>/views.py" in master
  115.             ad = form.save()
File "/Library/Python/2.7/site-packages/django/forms/models.py" in save
  364.                              fail_message, commit, construct=False)
File "/Library/Python/2.7/site-packages/django/forms/models.py" in save_instance
  86.         instance.save()
File "<Path to my app>/models.py" in save
  145.         super(Ad, self).save(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/db/models/base.py" in save
  463.         self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/Library/Python/2.7/site-packages/django/db/models/base.py" in save_base
  551.                 result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/Library/Python/2.7/site-packages/django/db/models/manager.py" in _insert
  203.         return insert_query(self.model, objs, fields, **kwargs)
File "/Library/Python/2.7/site-packages/django/db/models/query.py" in insert_query
  1576.     return query.get_compiler(using=using).execute_sql(return_id)
File "/Library/Python/2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  910.             cursor.execute(sql, params)

UPD2:

私のモデルはsaveメソッドを上書きしました:

def save(self,  *args, **kwargs):
    self.title = self.model.brand.name + " " + self.model.name
    super(Ad, self).save(*args, **kwargs)

ModelFormデータは、 (POSTからデータを取得する)を使用するビューによって処理されます。保存する前に、フォームが検証されました(form.is_valid())。

4

1 に答える 1

1

Djangoを介してINSERTステートメントを生成するコードにバグがあると思います。そのコードを見ずに問題が何であるかを言うのは難しいです。投稿したSQLのセミコロンは、有効に見えるSQLステートメントを終了します。

そのargs=("title", ...)部分は私にはSQLに見えません。コードをチェックして、SQLを生成するものに誤ってそれを追加している可能性があるものを確認してください。

于 2012-08-03T15:19:43.247 に答える