Django提交user_profile表单报错:收到意外关键字参数phoneNumber
Django表单提交报错:
user_profile() got an unexpected keyword argument 'phoneNumber' 解决方法 核心问题
你的视图函数和模型类同名了!都叫user_profile。当你在视图里写profile=user_profile(...)时,Python会优先调用当前作用域的视图函数,而不是模型类,这就导致传入的参数和视图函数的参数(仅request)不匹配,所以触发报错。另外你提到的phoneNomber是拼写失误,但根本问题是命名冲突。
解决步骤
方案1:重命名模型类(推荐,符合Django规范)
Django模型类通常用大驼峰命名,把user_profile改成UserProfile:
修改models.py:
class UserProfile(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) phoneNumber = models.CharField(max_length=12, blank=True) name = models.CharField(max_length=100, blank=True) address = models.CharField(max_length=500, blank=True)
同步修改views.py里的实例化代码:
profile = UserProfile(phoneNumber=phoneNumber, name=name, address=address, user=user)
最后执行数据库迁移:
python manage.py makemigrations python manage.py migrate
方案2:重命名视图函数
如果不想改动模型,就把视图函数改成user_profile_view这类名称:
修改views.py:
def user_profile_view(request): if request.method == "POST": phoneNumber = request.POST.get('phoneNumber') name = request.POST.get('Name') address = request.POST.get('address') user = request.user print(user) profile = user_profile(phoneNumber=phoneNumber, name=name, address=address, user=user) profile.save() return render(request, "firmApp/blog/user_profile.html")
同时要更新URL配置里的映射,把原来指向user_profile的路径改成user_profile_view。
额外优化建议
- 模板里的
Name输入框name属性改成小写name,和模型字段保持一致,避免混淆:
<input type="text" class="form-control" name="name" >
- 表单里的文件上传字段
formFile当前未被处理,若要实现文件上传:- 模型添加
ImageField/FileField字段:avatar = models.ImageField(upload_to='avatars/', blank=True) - 模板表单添加
enctype属性:<form action="/user_profile/" method="post" enctype="multipart/form-data">{% csrf_token %} - 视图里获取并保存文件:
avatar = request.FILES.get('formFile') profile = UserProfile(phoneNumber=phoneNumber, name=name, address=address, user=user, avatar=avatar)
- 模型添加
内容的提问来源于stack exchange,提问作者Malik Naveed
相关产品推荐
相关产品推荐

