Django运行报contact() got an unexpected keyword argument 'name'错误原因?
问题原因
报错由命名冲突导致:
- 你从
home.models导入的模型类名称为contact - 同时当前
views.py中的视图函数也命名为contact
在视图函数内部调用contact()时,Python会优先匹配当前作用域下的视图函数,而非导入的模型类。视图函数仅接收request一个位置参数,你传入name、email等关键字参数自然会触发类型错误。
解决方法
任选以下任意一种方案即可修复:
方案1:给导入的模型设置别名
修改导入模型的代码,避免和视图函数重名:
# 将原导入代码 from home.models import contact 替换为以下内容 from home.models import contact as ContactModel
同步修改实例化模型的代码:
ins = ContactModel(name=name,email=email,phone=phone,desc=desc)
方案2:修改视图函数的名称
将视图函数重命名为和模型不冲突的名称,例如contact_view,如果urls.py中绑定了该视图的路由,需要同步修改路由对应的函数名:
def contact_view(request): if request.method=="POST": name=request.POST['name'] email=request.POST['email'] phone=request.POST['phone'] desc=request.POST['desc'] ins=contact(name=name,email=email,phone=phone,desc=desc) ins.save() print('the data has been written to the db') return render(request, 'contact.html')
额外规范建议:Python社区默认类名采用大驼峰命名法,你可以将模型类名改为Contact,从根源上避免和小写命名的函数、变量发生冲突。
内容的提问来源于stack exchange,提问作者as_ad
相关产品推荐
相关产品推荐

