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

Django错误:'user_workouts'反向解析失败,新增训练无法重定向至用户训练页

解决Django反向解析'user_workouts'失败的问题

问题根源

错误源于两个核心问题:

  • 你的URL配置中设置了app_name = "myapp",反向解析时必须带上命名空间,直接调用'user_workouts'无法匹配到对应路由。
  • user_workouts视图依赖user_id参数完成查询,你调用redirect('user_workouts')时未传递这个必要参数。

修复步骤

1. 修正redirect语句(核心修复)

在add_workout视图的POST处理分支中,将redirect修改为带命名空间和参数的形式:

return redirect('myapp:user_workouts', user_id=user.id)

这里通过myapp:user_workouts指定命名空间+路由名称,同时传递user_id参数,满足反向解析的要求。

2. 修复GET请求分支的变量未定义问题

原代码中GET请求分支的context = {"workout": workout}会报错,因为workout变量仅在POST分支中定义。可以初始化一个空的Workout实例解决:

# GET请求时初始化空的Workout实例
workout = Workout()
context = {"workout": workout}
return render(request, "users/add_workout.html", context=context)

3. 优化user_workouts视图的查询逻辑

原查询语句workouts = get_list_or_404(Workout, user=user.id)可以简化为直接传递用户对象,更符合Django外键查询的规范:

workouts = get_list_or_404(Workout, user=user)

修改后的完整代码片段

views.py

# 返回用户所有训练内容的视图
def user_workouts(request, user_id):
    user = User.objects.get(id=user_id)
    workouts = get_list_or_404(Workout, user=user)
    return render(request, "users/workouts.html", {"user": user, "workouts": workouts})


# 创建训练内容的视图
def add_workout(request, user_id):
    user = get_object_or_404(User, id=user_id)
    if request.method == "POST":
        workout_title = request.POST.get("workout")
        reps = request.POST.get("reps")
        load = request.POST.get("load")
        last_update = request.POST.get("last_update")
        workout = Workout(workout=workout_title, reps=reps, load=load, last_update=last_update, user=user)
        workout.save()
        return redirect('myapp:user_workouts', user_id=user.id)
    # GET请求初始化空实例
    workout = Workout()
    context = {"workout": workout}
    return render(request, "users/add_workout.html", context=context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:00:14