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

