You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Python Django中create() takes 1 positional argument but 5 were given报错

报错解决:create() takes 1 positional argument but 5 were given

错误根因

Django ORM的create方法仅支持关键字参数传入字段值,不支持按位置顺序传参,你直接传入username,name,email,password四个位置参数,加上方法自带的self参数,总共5个位置参数,和方法定义冲突,因此触发报错。
另外你的代码还有两个隐含问题:

  • 直接把明文密码传入create方法会导致密码明文存储,不符合Django用户体系的加密要求,后续登录校验会失败
  • create方法执行后会自动调用save,你后续追加的user_create.save()是冗余代码

修复方案

推荐使用Django内置的create_user方法创建用户,该方法会自动对密码做哈希加密,适配Django自带的认证逻辑,修改后代码如下:

def register(request):
    if request.method=="POST":
        username=request.POST['username']
        name=request.POST['name']
        email=request.POST['email']
        password=request.POST['password']
        # 改用create_user,传入关键字参数
        user_create = User.objects.create_user(
            username=username,
            email=email,
            password=password
        )
        # 补充name字段赋值,如果你的User模型扩展了name字段,直接改为user_create.name = name即可
        user_create.first_name = name
        user_create.save()
        messages.success(request, " Your account has been successfully created")
        return redirect("/")
    else:
        return HttpResponse("404 - Not found")

如果要坚持使用create方法实现,需要修改为关键字参数传值,同时手动处理密码加密:

user_create = User.objects.create(
    username=username,
    name=name,
    email=email
)
user_create.set_password(password)
user_create.save()

注意事项

  • 接收POST参数时建议增加非空校验、格式校验,避免非法请求触发报错
  • 如果你使用的是自定义扩展的User模型,需要确认传入的字段名和模型定义的字段名完全一致

内容的提问来源于stack exchange,提问作者Kirito-Kun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:15:04