2012-08-03 5 views
1

내 모델 양식을 저장하려고합니다. 장고이 장고 의해 생성 INSERT SQL 쿼리 을 수행하는데 문제가 InternalError: current transaction is aborted, commands ignored until end of transaction blockDjango modelform 저장 방법 : 오류 : "args"또는 근처의 구문 오류

reurns. 모양은 다음과 같습니다.

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 :

내 모델은 저장 overwrited이 방법

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

이 데이터를 사용하여 뷰에서 proccessed한다 ModelForm (POST에서 데이터를 가져옴). 양식을 저장하기 전에 유효성을 검사했습니다 (form.is_valid()).

+0

'args' 이전에';'가 필요합니까? django에 의해 쿼리가 생성 되었습니까? – Rohan

+0

이 쿼리는 django에 의해 생성됩니다. 이것은 문제입니다. 잠깐. 다시 추적을 추가하겠습니다. –

+0

일부 코드보기, 모델도 유용 할 것입니다. – Rohan

답변

1

나는 장고를 통해 INSERT 문을 생성하는 코드에 버그가 있다고합니다. 코드를 보지 않고 문제가 무엇인지 말하기는 어렵습니다. 게시 한 SQL의 세미콜론은 유효한 SQL 문을 종료합니다.

args=("title", ...) 부분은 SQL을 나에게 보이지 않습니다. 코드를 검사하여 실수로 SQL을 생성하는 항목에 무엇이 추가되는지 확인하십시오.

+0

예, args =()는 python 데이터가'None','u'string''과 같은 파이썬리스트입니다. 하지만 왜? 나는 단지'form = MyForm (request.POST)'를 사용하고 나서'save' 메소드를 사용한다. 그래서 장고 api에서만 작동합니다. –

+0

이것은 매우 바보 스럽지만 ('args = (...) sql 쿼리에서) Django 문제도 환상적도 아니 었습니다. 그것은 내가 디버그 출력을 잘못 처리 한 것입니다. 실제 문제는 '열의 null 값입니다.'user_id 'null이 아닌 제약 조건 위반'입니다. 내보기를 수정하면 쉽게 수정할 수 있습니다. 감사! –