Django DRF开发注册接口报错User() got an unexpected keyword argument 'firstname'如何解决
问题原因
报错的核心是两个逻辑错误:
- Django内置(包括继承AbstractUser自定义的)用户模型的姓名字段为
first_name、last_name(带中间下划线),你调用create_user时传入的参数名是firstname、lastname(无下划线),和模型字段名不匹配,直接触发参数不识别报错。 create_user方法默认只接收username、email、password几个核心参数,你自定义添加的brand、is_business这类扩展字段不能直接作为create_user的入参传递,需要单独赋值保存。
修复方案
把RegisterSerializer中的create方法替换为如下逻辑即可:
def create(self, validated_data): # 先传入create_user原生支持的核心参数创建用户对象 user = User.objects.create_user( username=validated_data['username'], first_name=validated_data['first_name'], last_name=validated_data['last_name'], email=validated_data['email'], password=validated_data['password'] ) # 单独给自定义扩展字段赋值后保存 user.brand = validated_data.get('brand') user.is_business = validated_data.get('is_business', False) user.save() return user
补充注意
如果你使用的是自定义User模型,需要确认模型类中确实定义了brand、is_business两个字段,并且已经执行过makemigrations和migrate操作同步字段到数据库,避免后续出现字段不存在的报错。
内容的提问来源于stack exchange,提问作者NiGhTFuRy
相关产品推荐
相关产品推荐

