You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django博客页面用户提交评论无法展示问题求助

问题修复方案

核心错误分析

1. 评论提交后文章作者被修改

视图初始化评论表单时错误传入文章实例instance=sight,导致form.save(commit=False)返回的是文章对象而非评论对象。此时修改new_comment.user实际是修改了文章的user字段,直接替换了原作者。

2. 用户提交的评论无法显示

  • 表单初始化错误导致评论对象未被正确创建;
  • 错误代码new_comment.body = new_comment将评论对象本身赋值给body字段,导致评论内容无效,即使保存也无法正常展示。

修复后的views.py关键代码

@login_required(login_url='accounts/login')
def sight_details(request, pk):
    sight = Sight.objects.get(pk=pk)
    comments = sight.sight_comments.all()
    user_like_sights = Sight.objects.filter(pk=pk, user_id=request.user.pk)
    user = request.user
    
    if request.method == 'POST':
        # 移除instance=sight,表单对应SightComment模型,无需关联文章实例
        form = SightCommentForm(request.POST)
        if form.is_valid():
            new_comment = form.save(commit=False)
            new_comment.user = user
            new_comment.sight = sight
            # 移除错误的body赋值,form已处理body字段
            new_comment.save()
            return redirect('sight details', pk)
        else:
            print("Invalid Form")
            print("errors : {}".format(form.errors))
    else:
        form = SightCommentForm()

    # 清理context中无效的'is_ NY'字段
    context = {
        'sight_author': sight.user,
        'sight': sight,
        'has_user_liked_sight': user_like_sights,
        'likes_count': sight.sightlike_set.count(),
        'form': form,
        'comments': comments,
    }

    return render(request, 'sights/sight_details.html', context)

额外优化建议

  • 模板中{% empty %}块可添加提示文本,比如<p>暂无评论,快来抢沙发!</p>,提升用户体验;
  • 视图获取文章建议用get_object_or_404(Sight, pk=pk)替代Sight.objects.get(pk=pk),避免404错误直接抛出异常;
  • 评论表单无文件上传字段,可移除模板中表单的enctype="multipart/form-data"属性。

内容的提问来源于stack exchange,提问作者YoYo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:12:05