在创建应用程序时遇到了这个问题。 因此,每当我添加第一个评论时,问题就不会出现,但是当我第二次尝试时,会出现此错误:
重复的键值违反了唯一约束 “ 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唯一。
答案 0 :(得分:1)
在Django中
一对一关系。从概念上讲,这类似于具有unique = True
的ForeignKey
如果您检查源代码OneToOneField。,它将在 init 中设置unique
。
我认为您应该使用ForeignKey
而不是OneToOne
。
答案 1 :(得分:-1)
尝试删除unique = False
,然后进行迁移和迁移。如果已经存在迁移,并删除该应用程序的迁移和缓存,并在管理页面中删除该ID,则它可能起作用