【问题标题】:Duplicate key value violates unique constraint Django重复的键值违反了唯一约束 Django
【发布时间】:2019-09-22 13:43:32
【问题描述】:

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

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

我尝试将unique=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唯一。

【问题讨论】:

    标签: django database django-models


    【解决方案1】:

    在 Django 中

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

    如果你查看源代码OneToOneField.,它会在init中设置unique

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

    【讨论】:

    • 你说得对,谢谢 :) 我以为 OneToOne 在这里会有点不同,但我错了。
    【解决方案2】:

    尝试删除unique = False,然后进行迁移并迁移它。如果已经存在迁移并删除该应用程序的迁移和缓存并在管理页面中删除该 ID,那么它可能会起作用

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 2016-11-27
      • 2018-03-14
      • 2012-12-31
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 2012-06-20
      相关资源
      最近更新 更多