【问题标题】:null value in column "comment_id" of relation "blog_comment" violates not-null constraint关系“blog_comment”的“comment_id”列中的空值违反非空约束
【发布时间】:2021-03-15 22:20:53
【问题描述】:

尝试在我的 Django 博客中为 cmets 创建应用程序时,我收到上面列出的“关系“blog_comment”的“comment_id”列中的空值违反非空约束”错误。对于页面视图,我使用了带有 FormMixin 的详细视图。我不确定为什么会收到此错误。感谢您提供任何帮助。

完整的错误信息

IntegrityError at /post/7/
null value in column "comment_id" of relation "blog_comment" violates not-null constraint
DETAIL:  Failing row contains (6, dafsdfa, sdfasdfasdf, sdfadfa, 2021-03-10 15:03:11.283567+00, null).

views.py

class DetailPostView(FormMixin, DetailView):
    model = Post
    template_name = "blog/post_detail.html"
    context_object_name = "posts"
    form_class = CommentForm

    def form_valid(self, form):
        form.save()
        return super().form_valid(form)

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        self.object = self.get_object()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def get_success_url(self):
        return reverse("post-detail", kwargs={"pk": self.object.pk})

模型.py

class Comment(models.Model):
    comment = models.ForeignKey(Post, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.CharField(max_length=50)
    created_on = models.DateTimeField(auto_now_add=True)

Forms.py

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        labels = {"author": "Author", "title": "Title", "content": "Comment"}

        fields = ["author", "title", "content"]

【问题讨论】:

  • 评论中的评论字段是否应该是“post = models.ForeignKey(Post)”。此外,在您的 ModelForm 中,您没有包含要实际放入 Comment 模型中引用字段的 post 字段。
  • 您好 Trent,您是否建议我将 models.py 中的字段从“comment”更改为“post”。我认为这并不重要,因为我只是命名了与我的另一个模型 Post 相关联的行。至于您的 ModelForm 评论,我不确定我是否完全理解您的意思。你的意思是我需要在字段列表中添加帖子吗?
  • 如果这些都是愚蠢的问题,我的错,真的很困惑。
  • 没错。您“应该”更改模型上的名称,因为它实际上不是评论,而是帖子。第二部分是的,您需要将帖子添加到字段列表中,否则表单将不知道要将评论应用于哪个帖子。
  • 谢谢。特伦特,你的建议奏效了

标签: python django postgresql view


【解决方案1】:

见 cmets。 Trent 指出我没有在 forms.py 中引用要评论的帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2021-12-06
    • 2023-03-13
    • 2021-04-08
    • 1970-01-01
    • 2016-02-14
    • 2017-02-18
    相关资源
    最近更新 更多