try:
django_user = User.objects.get(username__iexact=self.username)
except User.DoesNotExist:
django_user = User(username=self.username)
django_user.is_staff=True
django_user.save()
以上通过按用户名搜索(如果存在)或通过创建新对象(如果不存在)来获取用户,并更新其属性并将其保存回db。
理想情况下,此代码应处理对象已经存在于数据库中的情况。但这会引发以下错误
duplicate key value violates unique constraint "auth_user_username_key"
DETAIL: Key (username)=(xxxxxxxx@yyyyy.com) already
exists.
我不知道原因。在Internet上搜索,发现可能是由于索引已损坏,必须重新设置序列,但找不到确切原因和解决方案。 请帮我解决一下这个。 预先感谢
答案 0 :(得分:0)
我已经有一段时间了,因为我不掌握Django技能,但到目前为止我还记得你 可以使用另一种方法来解决此问题,例如:
if Entry.objects.filter(username=self.username).exists():
# DO IF STUFF
else:
# DO ELSE STUFF
如果您的用户名不是pk密钥,则可能必须将其设置为唯一,这样可以防止用户名重复。
但是,您使用self.username变量的方式在我的脑海中浮现出一些东西。似乎您需要一些类来实现这种功能。而且我恐怕您拥有的这种代码和平性位于同一类模型声明中,通过您要执行的查询类型,您应该记住这一点:
如果您要检查尚未在数据库中插入的用户名,则它将没有pk,并且您将无法在数据库中查找此类数据。通过在.save()之前将其召唤,可能会发生某些错误。
希望这对您有所帮助。