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

时间:2013-08-03 19:35:10

标签: python django database-integrity

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部分,那么我将再次访问该页面但没有任何媒体访问权限。我被困了,我只想注册一个用户或者如果是integrityError,那么渲染到注册页面并显示错误消息。

顺便说一句:我正在使用django1.4和postgresql。而User是django的授权用户

2 个答案:

答案 0 :(得分:1)

使用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))

答案 1 :(得分:0)

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

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