django - 当前事务被中止,命令被忽略直到事务块结束

Posted

技术标签:

【中文标题】django - 当前事务被中止,命令被忽略直到事务块结束【英文标题】:django - current transaction is aborted, commands ignored until end of transaction block 【发布时间】:2013-08-04 21:11:51 【问题描述】:
try: 
   user = User.objects.create_user(_username, _email, pwd)
except IntegrityError, e:
   fail = e.message
   return render_to_response('register.html','reg_fail':fail,context_instance=RequestContext(request)) 

我有这段代码,一旦我发现 IntegrityError,我就会收到这个错误: 当前事务被中止,命令被忽略直到事务块结束

这是为什么?如果我删除context_instance 部分,那么我将再次获得该页面,但没有任何媒体访问权限。我被卡住了,我只想注册一个用户,或者如果完整性错误,然后渲染到带有错误消息的注册页面。

顺便说一下:我正在使用 django1.4 和 postgresql。 User 是 django 的认证用户

【问题讨论】:

【参考方案1】:

您使用的是默认数据库还是情侣数据库。建议使用 db_manager() 来指定数据库。 db_manager() 返回绑定到您指定的数据库的管理器副本。

User.objects.db_manager(’new_users’).create_user(...)

【讨论】:

【参考方案2】:

使用user_create,您开始交易,再次执行此操作会导致未提交交易的错误。您必须在user_create 之后提交(结束)您的交易,如下所示:

try: 
   user = User.objects.create_user(_username, _email, pwd)
   user.full_clean()
   user.save()
except IntegrityError, e:
   fail = e.message
   return render_to_response('register.html','reg_fail':fail,context_instance=RequestContext(request))

【讨论】:

哦,我想,create_user 会自动保存,不是吗? 不,不是。当你调用 create_user 时,你只是创建了 User 对象,full_clean 是验证数据,save 是事务的提交。 docs.djangoproject.com/en/1.4/topics/auth/…看这里 如您所见,save() 方法正在将数据插入数据库,user_create 只是创建对象。 不是真的,我在那儿看到这句话:Creates, saves and returns a User.

以上是关于django - 当前事务被中止,命令被忽略直到事务块结束的主要内容,如果未能解决你的问题,请参考以下文章

InternalError:当前事务被中止,命令被忽略直到事务块结束

如何调试内部错误当前事务被中止,命令被忽略直到事务块结束?

错误:当前事务被中止,在创建新记录时忽略命令直到事务块结束

我接下来的调试步骤是啥? InternalError:当前事务被中止,命令被忽略直到事务块结束

DatabaseError:当前事务被中止,命令被忽略直到事务块结束 - 在隐身模式但正常没有错误

使用 Python 连接到 Redshift 数据 - 错误:当前事务被中止,命令被忽略,直到事务块结束