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

Django JWT用户认证报错:TypeError: User()收到意外参数'password2'

解决Django JWT用户认证中password2参数错误问题

问题根源

  1. 序列化器中的validate和自定义创建方法未正确缩进,不属于UserRegistrationSerializers类,导致DRF使用默认的create逻辑,将password2传递给User模型(模型不支持该参数)。
  2. 自定义创建方法名错误:DRF的ModelSerializer创建实例时需要重写create方法,而非validate_data。
  3. 验证方法中异常类拼写错误:应为serializers.ValidationError而非serializer.ValidationError。

修正后的serializers.py代码

from rest_framework import serializers
from account.models import User

class UserRegistrationSerializers(serializers.ModelSerializer):
    password2 = serializers.CharField(style={'input_type':'password'}, write_only=True)
    
    class Meta:
        model = User
        fields=['email','name','tc','password','password2']
        extra_kwargs={
            'password':{'write_only':True}
        }

    def validate(self, attrs):
        password = attrs.get('password')
        password2 = attrs.get('password2')
        if password != password2:
            raise serializers.ValidationError("Password and Confirm Password Does not match")
        return attrs

    def create(self, validated_data):
        # 移除password2参数,User模型不接受该字段
        validated_data.pop('password2')
        # 调用自定义的create_user方法创建用户
        return User.objects.create_user(**validated_data)

其他说明

  • 你的models.py中UserManager的create_user方法已经正确处理了密码逻辑,无需修改。
  • views.py代码保持原样即可,修正序列化器后就能正常执行用户创建逻辑。

内容的提问来源于stack exchange,提问作者Filbadeha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:35:37