评论显示在django的每个帖子上?

问题描述 投票:0回答:3

嘿家伙我想在django做一个评论表,但我面临的问题是,在发布评论时,它会在每个其他帖子上发布..我希望它特定于帖子,用户将作为一个帖子正常评论表格有效。

这是views.py

def BlogDetail(request,pk):

    post = get_object_or_404(Post,pk = pk) 
    comment_view = Comment.objects.all()
    comment = CommentForm()

    if request.method  == 'POST':

        form = CommentForm(request.POST)

        if form.is_valid():
            form = form.save(commit = False)
            form.save()
            return redirect('blog',pk = post.pk)
    else:
        form = CommentForm()

    return render(request,'app/blog.html',{'blog_object':post,'comment':comment,
                                         'comment_view':comment_view})    

这是html代码

{% for i in comment_view %}
                <p>{{i.name}}</p>
                <p>{{i.body}}</p>
                {% endfor %}

这是models.py

class Post(models.Model):
    image = models.ImageField()
    title = models.CharField(max_length = 100)
    body = RichTextField(blank = True)
    published_date = models.DateTimeField(auto_now_add = True)
    categories = models.ManyToManyField(Category)
    featured = models.BooleanField(default = False)

    def __str__(self):
        return self.hastags

    def __str__(self):
        return self.title


class Comment(models.Model):
    name = models.CharField(max_length = 200)
    body = models.TextField()

    def __str__(self):
       return self.name
django django-models django-forms django-templates
3个回答
2
投票

您的Comment模型缺少FK(外键)/发布链接,因此所有评论都没有链接到任何内容。你需要将post字段添加到Comment模型,将其链接到Post模型,

class Comment(models.Model):
    post = models.ForeignKey(Post)  # <<<
    name = models.CharField(max_length = 200)
    body = models.TextField()
    def __str__(self):
       return self.name

在创建注释时提供post_id值,然后按如下方式更新查询代码:

comment_view = Comment.objects.all()

=>

comment_view = Comment.objects.filter(post_id=pk, )

0
投票
class Post(models.Model):
    image = models.ImageField()
    title = models.CharField(max_length = 100)
    body = RichTextField(blank = True)
    published_date = models.DateTimeField(auto_now_add = True)
    categories = models.ManyToManyField(Category)
    featured = models.BooleanField(default = False)

    def __str__(self):
        return self.title

    def get_comments(self):
        return Comment.objects.filter(article=self)


class Comment(models.Model):
    article = models.ForeignKey(Post, on_delete=models.CASCADE)
    comment = models.CharField(max_length=500)
    date = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
       return self.comment



def BlogDetail(request,pk):

    post = get_object_or_404(Post,pk = pk) 

    if request.method  == 'POST':    
        form = CommentForm(request.POST)    
        if form.is_valid():
            form = form.save(commit = False)
            form.article = post
            form.user = request.user
            form.save()
            return redirect('blog',pk = post.pk)
    else:
        form = CommentForm()
        context = {
            'post': post,
            'form' : form,
        }

    return render(request,'app/blog.html', context)    


    {% for comment in post.get_comments %}
        <p>{{comment.user}}</p>
        <p>{{comment.comment}}</p>
    {% endfor %}

0
投票

这是我在views.py中所做的更改

def BlogDetail(request,pk):

        post = get_object_or_404(Post,pk = pk)
        form = CommentForm()

        if request.method  == 'POST':

            form = CommentForm(request.POST)

            if form.is_valid():
                form = form.save(commit = False)
                form.article = post
                form.user = request.user
                form.save()
                return redirect('blog',pk = post.pk)
            else:
                form = CommentForm()  

        return render(request,'app/blog.html',{'blog_object':post,'comment':form,
    })    

以下是我在models.py中所做的更改

class Comment(models.Model):
    article = models.ForeignKey(Post, on_delete=models.CASCADE)
    comment = models.CharField(max_length=500)
    date = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
       return self.comment
© www.soinside.com 2019 - 2024. All rights reserved.