Django评论回复功能异常:提交后跳转URL不符求助
Django评论回复功能跳转异常问题排查与解决
问题描述
开发Django评论回复功能,已在Answer模型中添加parent字段,answer_create()功能正常,但提交评论回复时,跳转URL不符合预期:预期跳转至问题详情页(如http://127.0.0.1:8000/debateboard/305/),实际却停留在回复处理URL(如http://127.0.0.1:8000/debateboard/answer/reply/31/)。
错误原因分析
- 表单字段不匹配:回复表单的textarea命名为
reply_comment_{{ answer.id }},但AnswerForm对应的字段是content,导致表单提交后无法正确获取内容,form.is_valid()验证失败,进入视图末尾的render逻辑,直接返回模板而不跳转。 - 外键赋值与必填字段缺失:视图中给
sub_answer.parent赋值为answer.id,外键字段应直接赋值对象而非ID;同时未给回复设置关联的question字段(Answer模型中question为必填外键),导致保存时出错。
修复步骤
1. 修改回复表单的字段名称
将HTML中回复表单的textarea的name属性改为content,确保与AnswerForm的字段匹配:
<!-- 修正后的回复表单 --> <form action="{% url 'debateboard:reply_comment_create' answer.id %}" method="POST"> {% csrf_token %} <div class="form-group"> <textarea name="content" id="reply_comment_{{ answer.id }}" cols="20" rows="5"></textarea> <button type="submit">回复</button> </div> </form>
2. 修正视图中的外键赋值与必填字段设置
修改reply_comment_create视图,修正parent的赋值方式,并添加question字段的关联:
@login_required(login_url='common:login') def reply_comment_create(request, answer_id): answer = get_object_or_404(Answer, pk=answer_id) if request.method == "POST": form = AnswerForm(request.POST) if form.is_valid(): sub_answer = form.save(commit=False) sub_answer.author = request.user sub_answer.create_date = timezone.now() sub_answer.parent = answer # 直接赋值对象而非ID sub_answer.question = answer.question # 添加关联的question字段 sub_answer.save() return redirect('debateboard:detail', question_id=answer.question.id) else: return HttpResponseNotAllowed('only post is possible') # 验证失败时直接重定向回详情页 return redirect('debateboard:detail', question_id=answer.question.id)
内容的提问来源于stack exchange,提问作者KimGyeongMin-KR
相关产品推荐
相关产品推荐

