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

Django报错'WSGIRequest' object has no attribute 'file_uploaded'求助

问题解决

错误根因

'WSGIRequest' object has no attribute 'file_uploaded'报错的核心原因是你错误地假设request对象会携带你刚创建的File模型实例:request仅存储用户发起请求的原生数据(比如请求头、POST参数、上传的文件流等),并不会自动生成你业务逻辑中创建的模型实例属性。

此外你的赋值逻辑也不符合Django外键关联规则:Dataset的file_uploaded字段是关联File模型的一对一外键,直接传入File模型实例即可,不需要额外加.file后缀。

修改方案

你调用form.save()时会返回刚创建入库的File模型实例,用变量接住该实例后直接传入Dataset创建语句即可,修改后的视图核心代码如下:

def file_upload(request):
    data = None

    if request.method == 'POST':
        form = FileForm(request.POST, request.FILES)
        if form.is_valid():                               
            form.instance.user = request.user.profile    
            # 接住form.save()返回的刚创建的File模型实例
            new_file = form.save()  

            data = request.FILES['file_upload']             
            data = pd.read_csv(data, header=0, encoding="UTF-8")                  
      
            Dataset.objects.create(
                user = request.user.profile,
                # 直接传入File实例完成关联
                file_uploaded = new_file,
                name_user_A = data.iloc[0,1],
                name_user_B = data.iloc[1,1],
                # 其余字段保持不变
                [...]
                )          
            return redirect('upload_file')
        else:
            return redirect('home')
    else:
        form = FileForm()  
 
    context = {              
               'data': data,
               'form': form,                                      
               }
    return render(request, 'upload_file.html', context)

可选优化

如果你的FileForm是基于File模型生成的ModelForm,且表单字段已经包含file_upload,那么你不需要手动给filename赋值,可以直接在File模型的save方法中自动完成文件名赋值,精简视图代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:04