我正在尝试创建具有用户角色的自定义用户模型,但是在注册用户时我不断收到相同的错误
这就是我所做的
我的用户模型.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'.
我被困住了,我需要帮助,我认为问题出在序列化器或模型中的某个地方
字段
User.user_name
不存在。 Django contrib User
模型定义了字段 username
。请参阅https://docs.djangoproject.com/en/5.0/ref/contrib/auth/#fields