【问题标题】:AttributeError: type object 'CustomUser' has no attribute 'REQUIRED_FIELDS'AttributeError:类型对象“CustomUser”没有属性“REQUIRED_FIELDS”
【发布时间】:2021-07-10 09:22:46
【问题描述】:

我正在尝试在 Django 中创建自定义用户模型。我收到错误

如果不是 isinstance(cls.REQUIRED_FIELDS, (list, tuple)): AttributeError: 类型对象“CustomUser”没有属性“REQUIRED_FIELDS”

我在 settings.py 中添加了我的 CustomUser 模型,如下所示。

AUTH_USER_MODEL = "Pollapp.CustomUser"

这也是我的model.py

class CustomUserManager(BaseUserManager):
    """
    Custom user model manager where email is the unique identifiers
    for authentication instead of usernames.
    """
    def create_user(self, email, password, **extra_fields):
        """
        Create and save a User with the given email and password.
        """
        if not email:
            raise ValueError(_('The Email must be set'))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, password, **extra_fields):
        """
        Create and save a SuperUser with the given email and password.
        """
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))
        return self.create_user(email, password, **extra_fields)

class CustomUser(AbstractBaseUser, PermissionsMixin):
    username = None
    email = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __str__(self):
        return self.email

这是我的 serializers.py

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = CustomUser
        fields = ('__all__')


class UserSerializerWithToken(serializers.ModelSerializer):

    token = serializers.SerializerMethodField()
    password = serializers.CharField(write_only=True)

    def get_token(self, obj):
        jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
        jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

        payload = jwt_payload_handler(obj)
        token = jwt_encode_handler(payload)
        return token

    def create(self, validated_data):
        password = validated_data.pop('password', None)
        instance = self.Meta.model(**validated_data)
        if password is not None:
            instance.set_password(password)
        instance.save()
        return instance

    class Meta:
        model = CustomUser
        fields = ('token', 'email', 'password')

class RegisterSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True, required=True, validators=[validate_password])
    password2 = serializers.CharField(write_only=True, required=True)
    email = serializers.EmailField(allow_blank=False)

    class Meta:
        model = CustomUser
        fields = ('email', 'password', 'password2')
    def validate(self, attrs):
        if attrs['password'] != attrs['password2']:
            raise serializers.ValidationError({"password": "Password fields didn't match."})

        return attrs

    def create(self, validated_data):
        user = CustomUser.objects.create(
            email=validated_data['email'],
        )
        user.set_password(validated_data['password'])
        user.save()

        return user

【问题讨论】:

  • 我尝试删除并重新创建数据库。它没有用。

标签: python django django-models django-rest-framework


【解决方案1】:

通过在setings.py 中删除AUTH_USER_MODEL = "Pollapp.CustomUser",它对我有用。

【讨论】:

  • 现在,我遇到了另一个错误。 'CustomUser() 得到了一个意外的关键字参数'email'。我的 json 格式类似于 { email: 'email@gmail.com', password:'pswrd123', password2:'pswrd123'
猜你喜欢
  • 2018-03-16
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2019-06-08
相关资源
最近更新 更多