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

Django提交报告时无法关联保存作者用户名该如何解决?

问题根源

Report模型关联的User外键没有在提交表单时被赋值,导致存储为空,同时你的视图代码存在两处疏漏:

  1. ReportForm的fields列表未包含user字段,且视图中没有手动为报告实例绑定当前登录用户
  2. request变量拼写错误,且文件上传未传入request.FILES参数,会导致附件无法正常保存

修复方案

修改views.py代码如下:
首先导入登录校验装饰器,确保只有登录用户可以提交报告,再调整视图逻辑:

# 顶部导入登录校验装饰器
from django.contrib.auth.decorators import login_required

@login_required
def report(request):
    if request.method == 'POST':
        # 传入request.FILES处理文件上传
        report_form = ReportForm(request.POST, request.FILES)
        if report_form.is_valid():
            # 生成临时实例,暂不写入数据库
            report_instance = report_form.save(commit=False)
            # 手动绑定当前登录用户
            report_instance.user = request.user
            # 正式写入数据库
            report_instance.save()
            return redirect('accounts:home')
    else:
        report_form = ReportForm()
    return render(request, 'user/report.html', {
        'report_form': report_form
    })

补充说明

  • save(commit=False)作用是生成模型实例但不写入数据库,方便手动补充未通过表单传入的字段值
  • @login_required装饰器会自动将未登录用户跳转至登录页,避免匿名用户提交报告时request.user为空的问题
  • 如果你使用自定义登录路径,需要在settings.py中配置LOGIN_URL = '你的登录页路由'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:15:03