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
相关产品推荐
相关产品推荐

