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

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/)。

错误原因分析

  1. 表单字段不匹配:回复表单的textarea命名为reply_comment_{{ answer.id }},但AnswerForm对应的字段是content,导致表单提交后无法正确获取内容,form.is_valid()验证失败,进入视图末尾的render逻辑,直接返回模板而不跳转。
  2. 外键赋值与必填字段缺失:视图中给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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:21:35