2017-08-27 9 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 

?私が理解私は私のフォームにポストフィールドを与え、それを手動で選択した場合、それが動作するので、どこかで/何とかコメントは、右のブログの記事に送信されていないから

。しかし、理想的には、私はそれが自動的に対応するブログに送信されたいと思います。それはちょうどpostとしてあなたのForeignKeyや名前、名前を変更する方が理にかなって

if form.is_valid(): 
    comment = form.save(commit=False) 
    comment.posts = post 
    comment.save() 

答えて

1

CommentモデルでForeignKeyPostのモデルはpostsとして命名されていないpostとして、したがって、あなたは何をする必要がある

class Comment(models.Model): 
    post = models.ForeignKey(Post, related_name="comments") 
+0

あなたなら右、私は(私はチュートリアルの次てる物事をテストし、彼らは正確に何を参照するには、物事の名前を変更して、私は何が起こっているのか理解しようとするために一時停止しています私はあなたの助けなしにそれに気付かなかったでしょう!本当にありがとう!!それは今働く:D – dmandres

関連する問題