【问题标题】:django - current transaction is aborted, commands ignored until end of transaction blockdjango - 当前事务被中止,命令被忽略直到事务块结束
【发布时间】: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 的认证用户

【问题讨论】:

    标签: python django database-integrity


    【解决方案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 是事务的提交。
      • 如您所见,save() 方法正在将数据插入数据库,user_create 只是创建对象。
      • 不是真的,我在那儿看到这句话:Creates, saves and returns a User.
      猜你喜欢
      • 2011-12-06
      • 2013-10-25
      • 2014-07-04
      • 2011-01-13
      • 2012-05-11
      • 2016-12-11
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      相关资源
      最近更新 更多