method 1
すべてが正常に動作しますが、それはDjangoのRESTフレームワークのユーザー登録バリデーション混乱
にこの問題を与えると私はtwo different methods
でDjangoのREST APIを使用してユーザーを登録しようとしています:
https://stackoverflow.com/questions/43952178/django-rest-framework-user-registration-confusion
method 2
とすると、次のエラーが発生しますバックエンドでユーザーを作成しています
はAttributeErrorで/ API /ユーザー/ は、シリアライザ
UserCreateSerializer
上のフィールドpassword2
の値を取得しようとしたときに/ガットはAttributeErrorを登録します。シリアライザフィールドの名前が であり、
User
インスタンスの属性またはキーと一致しない可能性があります。 元の例外テキストは 'User'オブジェクトには属性がありません 'password2'です。
コード:
from django.contrib.auth import get_user_model
from rest_framework.exceptions import ValidationError
from rest_framework.serializers import (ModelSerializer,CharField)
User = get_user_model()
class UserCreateSerializer(ModelSerializer):
password2 = CharField(label='Confirm Password')
class Meta:
model = User
fields = [
'username',
'password',
'password2',
'email',
]
extra_kwargs = {
'password' : {'write_only': True},
'password2': {'write_only': True},
}
def validate_password(self, value):
data = self.get_initial()
password = data.get('password2')
password2 = value
if password != password2:
raise ValidationError('Passwords must match')
return value
def validate_password2(self, value):
data = self.get_initial()
password = data.get('password')
password2 = value
if password != password2:
raise ValidationError('Passwords must match')
return value
方法1:
def create(self, validated_data):
username = validated_data['username']
email = validated_data['email']
password = validated_data['password']
user_obj = User(
username=username,
email=email
)
user_obj.set_password(password)
user_obj.save()
return validated_data
方法2:
def create(self, validated_data):
user = User(
email=validated_data['email'],
username=validated_data['username'],
)
user.set_password(validated_data['password'])
user.save()
return user
注:のpython3を使用して、Djangoの10.7 & DjangoのRESTフレームワーク3
[Django REST Frameworkユーザー登録の混乱]の可能な複製(http:// stackoverflow。com/questions/43952178/django-rest-framework-user-registration-confusion) – e4c5