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

Django表单提交时自动填充模型当前登录用户字段的方法

问题原因

你的planForm已经排除了user字段,直接调用form.save()时,Django ORM不会自动从请求上下文获取当前登录用户填充该字段,因此存库后user字段始终为空。

修复方案

  • 给createPlan视图补充登录校验装饰器,和myPlan视图保持一致,避免未登录用户提交数据时报错
  • 表单校验通过后,不要直接调用form.save()写入数据库,先用commit=False参数生成内存中的模型实例,手动给user字段赋值当前登录用户后,再执行最终存库操作
  • 修正原代码中实例化空表单时漏写括号的不规范写法

修改后的views.py对应代码

from django.contrib.auth.decorators import login_required

@login_required(login_url='/register_user/')
def createPlan(request):
    # 原代码漏写(),属于不规范的实例化写法
    form = planForm()
    
    if request.method == "POST":
        form = planForm(request.POST)
        if form.is_valid():
            # 先创建模型实例,暂不写入数据库
            plan = form.save(commit=False)
            # 手动绑定当前登录用户
            plan.user = request.user
            # 最终写入数据库
            plan.save()
            return redirect('index')
    
    context = {'form': form}
    return render(request, 'workoutapp/create_plan.html', context)

可选优化建议

你当前planTable模型的user字段设置了null=True,等功能验证正常后建议移除该参数,强制每条计划数据必须关联对应用户,避免产生无主的脏数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:36:19