【发布时间】: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