繁体   English   中英

django-NOT NULL约束失败:blog_comment.posts_id

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM