Django提交报告时无法关联保存作者用户名该如何解决?
问题根源
Report模型关联的User外键没有在提交表单时被赋值,导致存储为空,同时你的视图代码存在两处疏漏:
- ReportForm的fields列表未包含user字段,且视图中没有手动为报告实例绑定当前登录用户
- 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
相关产品推荐
相关产品推荐

