评论显示在django的每个帖子上?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了评论显示在django的每个帖子上?相关的知识,希望对你有一定的参考价值。
嘿家伙我想在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
答案
您的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, )
另一答案
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 %}
另一答案
这是我在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
以上是关于评论显示在django的每个帖子上?的主要内容,如果未能解决你的问题,请参考以下文章
Django ORM:在不执行 N+1 查询的情况下检索帖子和最新评论