Django使用User.objects.create_user创建用户报错:create_user() takes from 2 to 4 positional arguments but 5 were given
解决Django User.objects.create_user() 参数数量错误问题
嘿,这个问题很常见,我来帮你捋清楚:
你遇到的错误create_user() takes from 2 to 4 positional arguments but 5 were given,本质是传递参数的方式不对。Django原生的User.objects.create_user()方法不支持第四个位置参数,你把friendid直接作为位置参数传进去,就导致参数数量超标了。
先看看原生方法的签名:
def create_user(self, username, email=None, password=None, **extra_fields):
这里的规则很明确:
username是必填的位置参数email和password是可选的位置参数(最多再加这两个)- 任何额外的用户字段,都必须通过关键字参数来传递
所以修正的方法很简单,把friendid改成关键字参数传入就行:
# 写法一:保留前三个位置参数,第四个用关键字传递 myuser = User.objects.create_user(username, email, password, friendid=friendid)
或者更推荐清晰的全关键字写法,避免后续再犯类似错误:
# 写法二:所有参数都用关键字,一目了然 myuser = User.objects.create_user( username=username, email=email, password=password, friendid=friendid )
额外提醒一句:如果你的User模型是自定义的(比如继承了AbstractUser并添加了friendid字段),那这样传是完全没问题的;如果friendid不是用户模型的字段,那你得检查是不是字段名写错了,或者需要在创建用户后再单独给对象赋值~
内容的提问来源于stack exchange,提问作者sami
相关产品推荐
相关产品推荐

