python - 我如何在 Django 中显示我的评论回复
问题描述
我有一个用户可以发帖的系统,我最近做了一个系统,以便用户可以回复这些评论。但是,它们不会显示。这是一些代码。 意见.PY
@login_required(login_url='/mainapp/user_login/')
def add_comment_to_post(request,pk):
post = get_object_or_404(Post,pk=pk)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = post
comment.author = request.user # add this line
comment.save()
return redirect('mainapp:post_detail',pk=post.pk)
else:
form = CommentForm()
return render(request,'mainapp/comment_form.html',{'form':form})
def get_queryset(self):
return Comment.objects.filter(created_date__lte=timezone.now()).order_by('-created_date')
@login_required(login_url='/mainapp/user_login/')
def add_reply_to_comment(request,pk):
comment = get_object_or_404(Comment,pk=pk)
if request.method == 'POST':
form = ReplyForm(request.POST)
if form.is_valid():
reply = form.save(commit=False)
reply.comment = comment
reply.author = request.user
reply.save()
return redirect('mainapp:post_detail',pk=comment.pk)
else:
form = ReplyForm()
return render(request,'mainapp/reply_form.html',{'form':form})
def get_queryset(self):
return Reply.objects.filter(created_date__lte=timezone.now()).order_by('-created_date')
这些是我对帖子添加评论和查看帖子的观点。urls.py 和 models.py 不需要更改,因为它确实有效,并且它显示在管理界面和所有内容中,但是我不知道如何在我的 HTML 中显示它
{% for comment in post.comments.all %}
{% if user.is_authenticated or comment.approved_comment %}
<p>Posted by: <strong>{{ comment.author }}</strong></p>
<p id="comment-text">{{ comment.text|safe|linebreaks }}</p>
<p>{{ comment.created_date|timesince }} ago</p><br>
{% endif %}
{% for reply in comment.replys %}
<p>Posted by: <strong>{{ reply.author }}</strong></p>
<p id="comment-text">{{ reply.text|safe|linebreaks }}</p>
<p>{{ reply.created_date|timesince }} ago</p><br>
{% endfor %}
{% empty %}
<p>No comments posted.</p>
{% endfor %}
因此,实际的父评论显示没有问题,但随后它到达for reply in comment.replys
. 我不知道我在这里做错了什么。我觉得它与有关的某些东西有关in comment.replys
,但我不知道是什么。
我曾尝试更改replys
为replies
,但出现错误,我将其简单地更改为reply
,但仍然无法正常工作。然后我将其更改为post.comment.reply
,但是再次,这不起作用。我已经尝试过堆和堆,但没有任何效果。
所以我想要的是将回复显示在评论下方,它应该可以工作,但它不是;我不知道我哪里出错了,所以任何帮助都会很好
编辑:这里是模型
class Comment(models.Model):
post = models.ForeignKey('mainapp.Post',related_name='comments',on_delete=models.CASCADE)
#...
def get_absolute_url(self):
return reverse('post_list')
def __str__(self):
return self.text
class Reply(models.Model):
comment = models.ForeignKey('mainapp.Comment',related_name='replies',on_delete=models.CASCADE)
#...
class Meta:
verbose_name_plural = "replies"
def get_absolute_url(self):
return reverse('post_list')
def __str__(self):
return self.text
我取出了田地,因为它们并不重要
解决方案
从评论到回复的链接称为replies
,它是经理。
{% for reply in comment.replies.all %}
推荐阅读
- java - 是否有 API/代码可以从 kibana 视觉效果、仪表板、图表中获取 id 列表?
- sql - PostgreSQL:获取与最大值关联的日期
- database - Oracle SQL Developer 在导出时更改日期格式
- laravel-5 - Laravel 项目中用于登录以及其他页面的错误报告问题
- python - Docker python 使用 ODPI-C 进行 Oracle 数据库连接
- c# - 是否可以测试只向控制台写入一行的功能?
- java - Android方法执行和结果不及时
- html - 外部 svg 文件已加载但未显示
- scala - 如何使用 scala 将字符串转换为通用数字?
- android - 如何在 React Native 中仅为 iOs 或 Android 安装包