尝试在序列化器“UserRegistrationSerializer”上获取字段“user_name”的值时出现 AttributeError

问题描述 投票:0回答:1

我正在尝试创建具有用户角色的自定义用户模型,但是在注册用户时我不断收到相同的错误

这就是我所做的

我的用户模型.PY

class User(AbstractBaseUser, PermissionsMixin):
    class RoleType(models.TextChoices):
        SCHOOL = 'SCHOOL'
        PARENT = 'PARENT'
    

    role = models.CharField(max_length=50, choices=RoleType.choices, default=RoleType.SCHOOL)
    user_name = models.CharField(max_length=255, unique=True, db_index=True)
    email = models.EmailField(max_length=255, unique=True, db_index=True)
    is_verified = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'user_name'
    REQUIRED_FIELDS = ['email']

    objects = UserManager()

    def __str__(self):
        return self.email

    def tokens(self):
        refresh = RefreshToken.for_user(self)
        return {
            'refresh': str(refresh),
            'access': str(refresh.access_token)
        }

父模型.PY

class Parent(models.Model):
    # other fields related to student ...
    Parental_code = models.CharField(max_length=10, unique=True)
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="user", null=True)

序列化器.PY

class UserRegistrationSerializer(serializers.ModelSerializer):
    RoleType = {
        'SCHOOL': 'SCHOOL',
        'PARENT' : 'PARENT'
    }

    role = serializers.ChoiceField( 
                                      choices=RoleType, default=RoleType['PARENT'])
    
    class Meta:
        model = User
        fields = ['user_name', 'password', 'email', 'role']
        extra_kwargs = {
            'password': {'write_only': True},
            'email': {'required': True},
            'user_name': {'required': True}
        }

    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        return user



class ParentSerializer(serializers.ModelSerializer):
    user = UserRegistrationSerializer(write_only=True)

    class Meta:
        model = Parent
        fields = ['Parental_code', 'user']

    def create(self, validated_data):
        user_data = validated_data.pop('user')
        user = User.objects.create_user(**user_data)
        user = Parent.objects.create(user=user, **validated_data)
        return user

我遇到错误

我尝试检查拼写,但我没有发现该区域的任何问题

AttributeError: Got AttributeError when attempting to get a value for field `user_name` on serializer `UserRegistrationSerializer`.  
The serializer field might be named incorrectly and not match any attribute or key on the `Parent` instance.
Original exception text was: 'Parent' object has no attribute 'user_name'.

我被困住了,我需要帮助,我认为问题出在序列化器或模型中的某个地方

python django django-rest-framework
1个回答
0
投票

字段

User.user_name
不存在。 Django contrib
User
模型定义了字段
username
。请参阅https://docs.djangoproject.com/en/5.0/ref/contrib/auth/#fields

© www.soinside.com 2019 - 2024. All rights reserved.