2012-08-03 124 views
1

我試圖保存我的模型窗體。 Django重新啓動InternalError: current transaction is aborted, commands ignored until end of transaction blockDjango模型保存方法:錯誤:在「args」處或附近的語法錯誤

這是執行INSERT sql-query 時出現的一個問題,它由Django生成。它看起來像:

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

我試圖在PgAdmin中執行此查詢。它返回了這個錯誤:

ERROR: syntax error at or near "args" 

什麼可能是錯的?

UPD:這裏是tracback爲InternalError該:

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:

我的模型具有overwrited保存方法:

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())。

+0

在'args'之前需要';'嗎?查詢是由django生成還是由您執行? – Rohan 2012-08-03 15:06:56

+0

這個查詢是由django生成的。這是個問題。等一下。我會添加追溯 – 2012-08-03 15:08:18

+0

一些代碼的觀點,模型也將是有用的。 – Rohan 2012-08-03 15:09:43

回答

1

我會說你在你的代碼中有一個通過Django產生INSERT語句的錯誤。如果沒有看到代碼,很難說出問題所在。您發佈的SQL中的分號結束了一個看起來有效的SQL語句。

args=("title", ...)部分看起來不像SQL。檢查你的代碼,看看什麼可能會意外地附加到生成SQL的任何東西。

+0

是的,args =()是一個python數據類似'None','u'string''的python列表。但爲什麼?我只是使用'form = MyForm(request.POST)'然後'save'方法。所以它只適用於Django api。 – 2012-08-03 15:28:39

+0

這是非常愚蠢的,但(在SQL查詢中的'args =(...)')不是Django的問題,也不是很棒。這只是我應付調試輸出錯誤。實際的問題是'user_id'列中的空值違反了非空約束,這很容易通過編輯我的視圖來解決。謝謝! – 2012-08-03 15:35:54

相關問題