2017-08-27 123 views
0

我试图将评论表单提交给相应的博客。当我这样做时,我收到错误“NOT NULL约束失败:blog_comment.posts_id”。django - 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 

什么是错我的代码?

从我所了解的某处/某种程度上来说,评论并没有发送到正确的博客文章,因为如果我将我的表单设置为帖子栏并手动选择它,它就可以工作。但理想情况下,我希望它会自动发送到相应的博客。

回答

1

Comment模型ForeignKeyPost的型号被命名为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") 
+0

你是对的,我正在重新命名测试的东西,看看他们究竟做了什么(我正在跟随一个教程,我暂停试图了解将要发生的事情),我忘记重新命名了。如果没有你的帮助,我不会注意到它!非常感谢!!它现在有效:D – dmandres

相关问题