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:当前事务被中止,命令被忽略直到事务块结束