重复的键值违反了唯一约束Django

时间:2019-05-04 04:38:10

标签: django database django-models

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

  

重复的键值违反了唯一约束   “ 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唯一。

2 个答案:

答案 0 :(得分:1)

在Django中

  

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

的ForeignKey

如果您检查源代码OneToOneField。,它将在 init 中设置unique

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

答案 1 :(得分:-1)

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