如何修复错误,请帮忙?得到 AttributeError 'User' 对象没有属性 'password1'。
我想添加两个密码字段。用户已创建但发生错误
AttributeError:尝试在序列化器
password1
上获取字段 UserSerializer
的值时出现 AttributeError。
序列化器字段可能命名不正确,并且与 User
实例上的任何属性或键不匹配。
原始异常文本是:“User”对象没有属性“password1”。
views.py
class RegisterAPIView(generics.CreateAPIView):
serializer_class = UserSerializer
queryset = User.objects.all()
序列化器.py
class UserSerializer(serializers.Serializer):
username = serializers.CharField(
label="Имя пользователя",
style={"input_type": "username"}
)
email = serializers.CharField(
label="почта",
style={"input_type": "email"}
)
password1 = serializers.CharField(
label="Пароль",
style={'input_type': 'password'}
)
password2 = serializers.CharField(
label="Пароль повторно",
style={'input_type': 'password'}
)
def create(self, validated_data):
password1 = validated_data.pop('password1')
password2 = validated_data.pop('password2')
print(validated_data)
if password1 and password2 and password1 != password2:
raise ValidationError("Passwords don't match")
validated_data["password"] = password1
print(validated_data)
user = User.objects.create(**validated_data)
print(user.id)
return user
使用模型序列化器,对password2使用 write_only=True 属性,覆盖 validate 方法进行验证,示例:
class UserSignUpSerializer(serializers.ModelSerializer):
# or confirm_password field
password2 = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ['username', 'password', 'password2'] # more field you want
def validate(self, data):
if data.get('password') != data.get('password2'):
raise serializers.ValidationError(_("passwords are not same."))
return data
def create(self, validated_data):
validated_data.pop('password2') # you should pop this before create
user = User.objects.create_user(
**validated_data
)
return user