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
相关产品推荐
相关产品推荐

