Django的尝试例外声明引起IntegrityError:

我们用我们的系统上的PayPal检查用户是否已支付之前,已经有一个帐户。 今天早上我收到了回溯,基本上给了我一个完整的错误。

IntegrityError:(1062“重复条目'user_1234_before”关键2“)

我statemtent如下所示。

try: user = User.objects.get(email=ipn_obj.payer_email) except: user_slug = ("%s_%s_before") % (ipn_obj.first_name, ipn_obj.last_name) username = slugify(user_slug) user = User.objects.create_user(username, ipn_obj.payer_email, 'testpassword') user.first_name = ipn_obj.first_name user.last_name = ipn_obj.last_name user.save()

提前致谢。

--------------解决方案-------------

永远不要使用空白except声明。 这里发生了什么就是为什么一个很好的示范。

你大概是用来试图/ except块捕捉User.DoesNotExist例外。 然而,你的代码实际上是提高了完全不同的例外。 因为你吞咽下去,这是不可能知道是哪一个,但可能ipn_obj是不是你认为它是,没有一个payer_email错误,所以你要AttributeError 。 或者,可能的话,你得到User.MultipleObjectReturned例外。

改变你exceptexcept User.DoesNotExist ,然后调试您的实际问题。

我觉得你有两个用户具有不同的payer_mail但同样first_namelast_nameusername (由姓和名的)是相同的两个用户。 可能username是唯一键User ,让您的错误。

除了 ​​醒目的权利除外( User.DoesNotExist ),如果你想留住你的代码,我认为你应该'uniquify“的username使用的电子邮件字段(我想是唯一的):

user_slug = ("%s_%s_before") % (ipn_obj.first_name, ipn_obj.last_name)

搭配:

user_slug = ("%s_%s_%s_before") % (ipn_obj.first_name, ipn_obj.last_name, ipn_obj.payer_email)

要么:

user_slug = ("%s_before") % (ipn_obj.payer_email)

唯一的例外是实际上被创造(即INSERT语句)提出了用户与已经采取了用户名。 你应该这样做,在插入之前其存在检查。

分类:Django的 时间:2015-03-15 人气:7
本文关键词: Django的,Django的意见
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.697 (s). 10 q(s)