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

Django提交ModelForm时如何将已登录用户传入关联外键字段

问题原因

你当前的写法是给表单实例额外添加了一个自定义的user属性,这个属性和表单关联的UserInfo模型的外键字段没有任何关联,调用form.save()时并不会把这个值写入数据库,所以字段一直为空。

解决方法

修改视图函数中表单验证通过后的保存逻辑,调用form.save(commit=False)先获取未提交到数据库的模型实例,给这个实例的user字段赋值后再执行保存操作即可。

修改后的视图代码

from django.contrib.auth.decorators import login_required

# 加登录验证装饰器,确保只有登录用户能提交表单,避免request.user为匿名用户报错
@login_required
def userForm(request):
    if request.method == "POST":
        form = InfoForm(request.POST)
        if form.is_valid():
            # 先获取模型实例,暂不提交到数据库
            user_info = form.save(commit=False)
            # 给模型实例的user外键字段赋值
            user_info.user = request.user
            # 正式保存到数据库
            user_info.save()
            return redirect('profile')
    else:
        form = InfoForm()
    context = {
        'form':form
    }
    return render(request, 'fitness/user_form.html', context)
额外优化建议
  • 如果UserInfo的user字段为必填项,可以把模型字段定义里的null=True, blank=True去掉,从数据库层面避免空值产生
  • 你当前模板里加了enctype="multipart/form-data",如果表单没有上传文件的需求可以删除该属性,不影响现有功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:39:03