[英]NOT NULL constraint failed: posts_comment.post_id django
[英]django - NOT NULL constraint failed: blog_comment.posts_id
我正在尝试让用户将评论表单提交到相应的博客。 这样做时,出现错误“ NOT NULL约束失败:blog_comment.posts_id”。
views.py
def add_comment(request, slug):
post = get_object_or_404(Post, slug=slug)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.save()
return redirect('blog:post_detail', slug=post.slug)
else:
form = CommentForm()
template = "blog/post/add_comment.html"
context = {'form': form}
return render(request, template, context)
forms.py
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('user', 'email', 'title', 'body',)
models.py
class Post(models.Model):
STATUS_CHOISES = (
('draft', 'Draft'),
('published', 'Published'),
)
category = models.ForeignKey(Category)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique=True)
content = models.TextField()
seo_title = models.CharField(max_length=250)
seo_description = models.CharField(max_length=160)
author = models.ForeignKey(User, related_name='blog_posts', default=settings.AUTH_USER_MODEL)
published = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=9, choices=STATUS_CHOISES, default='draft')
def get_absolute_url(self):
return reverse('blog:post_detail', args=[self.slug])
def __str__(self):
return self.title
class Comment(models.Model):
posts = models.ForeignKey(Post, related_name="comments")
user = models.CharField(max_length=250)
email = models.EmailField()
title = models.CharField(max_length=250)
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
approved = models.BooleanField(default=False)
def approved(self):
self.approved = True
self.save()
def __str__(self):
return self.title
我的代码有什么问题?
据我了解,该评论未在某处/以某种方式发送到正确的博客文章,因为如果我在表单中提供一个帖子字段并手动选择它,则它可以工作。 但理想情况下,我希望将其自动发送到相应的博客。
Comment
模型中的Post
模型的ForeignKey
被命名为posts
而不是post
,因此您需要执行以下操作:
if form.is_valid():
comment = form.save(commit=False)
comment.posts = post
comment.save()
仅重命名ForeignKey并将其命名为post
更有意义:
class Comment(models.Model):
post = models.ForeignKey(Post, related_name="comments")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.