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

重复键值违反唯一约束 Django

林绪
2023-03-14

我在创建应用程序时遇到了这个问题。因此,每当我添加第一条评论时,问题都不会出现,但当我第二次尝试时,我会收到此错误:

重复的键值违反了唯一约束“tripplanner_discussion_author_id_key”详细信息:键 (author_id)=(1) 已存在。

我试图把唯一=False放到 models.py,但它根本没有帮助。

models.py

class Discussion(models.Model):
    author = models.OneToOneField(User, on_delete=models.CASCADE, unique=False)
    group = models.ForeignKey(Trip, on_delete=models.CASCADE, unique=False)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)

views.py

class DiscussionView(LoginRequiredMixin, CreateView):
    model = Discussion
    template_name = 'tripplanner/discussion.html'
    fields = ['text']
    success_url = '/'

    def form_valid(self, form):
        form.instance.author = self.request.user
        form.instance.group = self.trip
        return super(DiscussionView, self).form_valid(form)

更新

当我登录到另一个用户时,一个帖子的问题消失了,然后又出现了。所以要解决的问题是使这个author_id唯一。

共有2个答案

顾乐心
2023-03-14

尝试删除< code>unique = False,然后进行迁移

司空兴为
2023-03-14

在姜戈

一对一的关系。从概念上讲,这类似于unique=True的ForeignKey

如果您检查源代码一对一字段,它将在初始化中设置一。

我认为您应该使用ForeignKey而不是OneToOne

 类似资料:
  • 当并发客户机试图将数据插入子表时,我们面临唯一的约束冲突问题。 假设我们有1以下的表格。用户user_id、first_name、last_name。2.项目project_idproject_name和project_description。 两者都有着多对多的关系。 当两个客户端试图创建一个新用户时。假设client1创建了user1(id=aa1),子记录项目(id=1)。Client2还创

  • 这是我的stacktrace: 学生表: 学生实体:学生标识默认为自动递增 postgres控制台(这些学生由sql脚本创建): 在此处输入图像描述 我也尝试过这样生成,但这没有帮助 我用postgreql它似乎我有问题与id Generator,谢谢你的想法和答案

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

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

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

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