当前位置: 首页 > 知识库问答 >
问题:

django后auth_user重复键值违反了唯一约束“auth_user_username_key”

沈琛
2023-03-14
    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()

如果存在,上面的代码通过按用户名搜索来获取用户,如果不存在,则创建一个新对象,并更新其属性并将其保存回数据库。

理想情况下,该代码应该处理对象已经存在于数据库中的情况。但它抛出了以下错误:

duplicate key value violates unique constraint "auth_user_username_key"
DETAIL:  Key (username)=(xxxxxxxx@yyyyy.com) already 
         exists.

我不明白这是为什么。在互联网上搜索,发现这可能是因为指数被破坏,并已重置序列,但无法找到确切的原因和解决方案。请帮我做这件事。预先感谢

共有1个答案

龚寂弦
2023-03-14

我已经有一段时间没有更新我的Django技能了,但据我所知,你可以使用另一种方法来克服这个问题,比如:

if Entry.objects.filter(username=self.username).exists():
    # DO IF STUFF
else:
    # DO ELSE STUFF

如果您的用户名不是pk密钥,那么您可能必须将其设置为唯一,这样可以防止用户名重复。

官方詹戈参考

但是,通过您使用self.username变量的方式,它正在我的脑海中挖掘一些东西。似乎你有一些类,你需要制作这样的功能。而且我担心你拥有的这种代码的和平位于同一个类模型声明中,通过你想要执行的那种查询,你应该记住这一点:

如果您想检查一些尚未插入数据库的用户名,那么它将没有pk,您将无法在数据库中查找此类数据。通过在.save()之前调用它,可能会发生一些错误。

希望这对你有帮助。

 类似资料:
  • 我有一个笑话模型: 现在,当我试图迁移最后一行时,我得到了错误。基本上,我想将一个用户链接到Joke对象,因为我已经有了一个数据库,所以我希望默认值为1,这是管理员用户的id(我检查过了...).Makemigrations工作正常,但是当我尝试迁移时,我得到了这个: 我真的不明白怎么了。有什么想法吗?

  • 我在创建应用程序时遇到了这个问题。因此,每当我添加第一条评论时,问题都不会出现,但当我第二次尝试时,我会收到此错误: 重复的键值违反了唯一约束“tripplanner_discussion_author_id_key”详细信息:键 (author_id)=(1) 已存在。 我试图把放到 models.py,但它根本没有帮助。 models.py views.py 更新 当我登录到另一个用户时,一个

  • 我在django应用程序中创建了一个模型,并从pgadmin将数据填充到表中,但现在当我试图从应用程序创建记录时,它抛出了这个完整性错误: 重复的键值违反了唯一约束“packsapp_foo_pkey” 详细信息:键(id)=(4)已经存在。 这是models.py 我是否总是必须从应用程序本身插入数据? Views.py

  • 我必须交换同一表的不同行的属性。 有一列“reference_id”在 DB 中具有唯一的约束。 代码: A 级- B级- 异常跟踪:

  • 问题内容: 我正在跟着我先前提出的一个问题,在这个问题中,我试图寻求从愚蠢/编写不佳的mysql查询到postgresql的转换。我相信我成功了。无论如何,我正在使用从mysql数据库手动移动到postgres数据库的数据。我正在使用如下查询: 我有理由相信这很好。但是,这导致了新问题。尝试提交时,我从django收到一条错误,指出: 我已经看过这里发布的一些回复,但是我还没有找到解决我的问题的方

  • Python 3.6 Django 2.0 我有两个模型: 然后,在admin类中,我创建了一般的内联表格: 当我试图通过内联保存相同的对象时,我得到一个错误: 重复的键值违反了唯一约束“projects_toolresult_content_type_id_object_i_71ee2c2e_uniq”详细信息:键(content_type_id、object_id和tool_id)=(18、2