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

Angular传文件至Django后端遇TypeError: TaskData()获意外参数'file'

解决Django模型实例化时"unexpected keyword arguments: 'file'"错误

问题核心出在你对Django模型字段参数的误用:

在TaskData模型的FileField定义中,你设置了name="upload_file",这个参数的作用是将模型中该字段的属性名从定义的file强制改为upload_file。所以当你在视图里用TaskData(title=title, file=file)实例化时,Django会认为file是未定义的参数,从而抛出错误。

三种可行的修复方案:

方案1:移除name参数,保持字段属性名与定义一致

修改模型代码:

class TaskData(models.Model):
    title = models.CharField(max_length=255)
    file = models.FileField(
        upload_to="uploads/", null=True, blank=True
    )

视图代码无需修改,TaskData(title=title, file=file)可正常运行。

方案2:用db_column指定数据库列名(保留模型属性名file)

如果你需要数据库表中该列的名称为upload_file,应该使用db_column参数而非name:

class TaskData(models.Model):
    title = models.CharField(max_length=255)
    file = models.FileField(
        upload_to="uploads/", null=True, blank=True, db_column="upload_file"
    )

这样模型属性名还是file,数据库列名设为upload_file,视图代码不需要改动。

方案3:修改视图代码,使用正确的属性名upload_file

如果必须保留name="upload_file"的设置,那么实例化时要改用修改后的属性名:

file = request.FILES["file"]

task = TaskData(
    title=title,
    upload_file=file,
)

task.save()

注意:Django字段的name参数用于覆盖模型的属性名称,db_column才是指定数据库表的列名,二者不要混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:01:14