AttributeError: Получил AttributeError при попытке получить значение для поля `user` в сериализаторе` RegisterSerializer` - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь зарегистрировать пользователя с помощью сериализатора. У меня есть UserSeriaizer в RegisterSerializer, я думал, что пользователь создан и может получить доступ к serializer.validated_data, но я не могу получить доступ к serializer.data

Вот мои классы сериализатора:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'username', 'first_name', 'last_name', 'email', 'password']
        extra_kwargs = {
            'id' : {'read_only' : True},
            'password' : {'write_only' : True}
        }


class RegisterSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    class Meta:
        model = Token
        fields = ['user', 'key']
        extra_kwargs = {
            'key' : {'read_only' : True}
        }
        depth=1

    def create(self, validated_data):

        user = User.objects.create_user(**validated_data['user'])
        user.is_active = False
        token = Token.objects.create(user = user)
        user.save()
        return(user)

И вид:

serializer_class = RegisterSerializer(data={'user' : request.data})
try:
    serializer_class.is_valid(raise_exception = True)
except Exception as e:
    return(Response(serializer_class.errors, status=404))
else:
    user = serializer_class.save()
print(serializer_class.data)

Модели следующие:

class User(AbstractUser):
    id = models.AutoField(primary_key=True)
    username = models.CharField(max_length=15, unique=True)
    first_name = models.CharField(max_length=15, blank=True)
    last_name = models.CharField(max_length=15, blank=True)
    email = models.EmailField(max_length=254, unique=True)
    password = models.CharField(max_length=254)
    #is_active = models.BooleanField(default=True)
    #is_admin = models.BooleanField(default=True)

    USERNAME_FIELD = 'username'
    objects = UserManager()

    def __str__(self):
        return self.username

и токен создается с использованием 'from rest_framework .authtoken.models import Token '

...