attributeerror:type对象“customuser”没有属性“required\u fields”

o2rvlv0m  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(301)

我试图在django中创建一个自定义用户模型。我得到的错误是
如果不是isinstance(cls.required_字段,(列表,元组)):attributeerror:type对象“customuser”没有属性“required_字段”
我在settings.py中添加了我的customuser模型,如下所示。

  1. AUTH_USER_MODEL = "Pollapp.CustomUser"

这是我的model.py

  1. from django.contrib.auth.models import BaseUserManager, PermissionsMixin
  2. from django.contrib.auth.base_user import AbstractBaseUser
  3. class UserManager(BaseUserManager):
  4. def create_user(self, email, firstname, lastname, phone,password=None):
  5. user = self.model(
  6. email = self.normalize_email(email),
  7. firstname = firstname,
  8. lastname = lastname,
  9. phone = phone,
  10. )
  11. user.set_password(password)
  12. user.save(using = self._db)
  13. return user
  14. def create_superuser(self, email,firstname,lastname,phone,password=None):
  15. user = self.create_user(
  16. email=email,
  17. password=password,
  18. firstname = firstname,
  19. lastname = lastname,
  20. phone = phone,
  21. )
  22. user.is_admin = True
  23. user.is_staff = True
  24. user.save(using=self._db)
  25. return user
  26. class CustomUser(AbstractBaseUser, PermissionsMixin):
  27. id = models.CharField(max_length=200, default=uuid.uuid4,unique=True,primary_key=True)
  28. email = models.EmailField(null=False, max_length=100,unique=True)
  29. firstname = models.CharField(null=False, max_length=100)
  30. lastname = models.CharField(null=False, max_length=100)
  31. phone = models.IntegerField(null=False,unique=True)
  32. date_joined = models.DateTimeField(auto_now=True)
  33. last_login = models.DateTimeField(auto_now=True)
  34. is_admin = models.BooleanField(default = False)
  35. is_active = models.BooleanField(default = True)
  36. is_staff = models.BooleanField(default = False)
  37. is_superuser = models.BooleanField(default = False)
  38. USERNAME_FIELD = 'email'
  39. REQUIRED_FIELDS = ['firstname','lastname','phone']
  40. objects = UserManager()
  41. def __str__(self):
  42. return self.email + ", " + self.firstname
  43. def has_perm(self, perm, obj = None):
  44. return self.is_admin
  45. def has_module_perms(self, app_label):
  46. return True

我还尝试提供必需的字段,如必需的字段=('firstname'、'lastname'、'phone')
这是我的serializers.py

  1. class UserSerializer(serializers.ModelSerializer):
  2. class Meta:
  3. model = CustomUser
  4. fields = ('__all__')
  5. class UserSerializerWithToken(serializers.ModelSerializer):
  6. token = serializers.SerializerMethodField()
  7. password = serializers.CharField(write_only=True)
  8. def get_token(self, obj):
  9. jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
  10. jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
  11. payload = jwt_payload_handler(obj)
  12. token = jwt_encode_handler(payload)
  13. return token
  14. def create(self, validated_data):
  15. password = validated_data.pop('password', None)
  16. instance = self.Meta.model(**validated_data)
  17. if password is not None:
  18. instance.set_password(password)
  19. instance.save()
  20. return instance
  21. class Meta:
  22. model = CustomUser
  23. fields = ('token', 'username', 'password')
  24. class RegisterSerializer(serializers.ModelSerializer):
  25. password = serializers.CharField(write_only=True, required=True, validators=[validate_password])
  26. password2 = serializers.CharField(write_only=True, required=True)
  27. class Meta:
  28. model = CustomUser
  29. fields = ('username', 'password', 'password2', 'email', 'first_name', 'last_name')
  30. def validate(self, attrs):
  31. if attrs['password'] != attrs['password2']:
  32. raise serializers.ValidationError({"password": "Password fields didn't match."})
  33. return attrs
  34. def create(self, validated_data):
  35. user = User.objects.create(
  36. username=validated_data['username'],
  37. email=validated_data['email'],
  38. first_name=validated_data['first_name'],
  39. last_name=validated_data['last_name'],
  40. )
  41. user.set_password(validated_data['password'])
  42. user.save()
  43. return user

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题