【发布时间】:2021-08-08 21:32:28
【问题描述】:
我正在做一个项目,我通过扩展 AbstractBaseUser 和 PermissionMixin 创建了自定义用户,模型类如下。
class User(AbstractBaseUser, PermissionsMixin):
phone_number = models.CharField(
primary_key=True, validators=[MinLengthValidator(10)], max_length=10
)
password = models.CharField(
null=False, blank=False, validators=[MinLengthValidator(8)], max_length=225
)
date_joined = models.DateTimeField(null=False, blank=False, default=timezone.now)
last_login = models.DateTimeField(null=True, blank=True)
last_logout = models.DateTimeField(null=True, blank=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
USERNAME_FIELD = "phone_number"
REQUIRED_FIELDS = []
objects = CustomUserManager()
@staticmethod
def hash_password(sender, instance, *args, **kwargs):
if not instance.is_staff and not instance.is_superuser:
instance.set_password(instance.password)
def get_token(self):
return Token.objects.get(user=self)
def __str__(self):
return self.phone_number
# signals for Model User
pre_save.connect(User.hash_password, sender=User)
还有下面的ModelSerializer与之对应。
class UserLoginSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ["phone_number", "password"]
现在如果我将帖子数据传递为:-
{
"phone_number":8888888888,
"password":12345678
}
我得到了什么:
-
serializer.is_valid() 返回 False。
-
如果我在做 serializer.is_valid(raise_exception=True) 那么我就是 得到响应:
{ “电话号码”: [ “使用此电话号码的用户已存在。” ] }
我的疑问是:
- 我知道 8888888888 已经在数据库中,但我仍然想 使用 serializer.validated_data.get('phone_number', None) 访问它
- 我也想知道原因,为什么会这样,是在演戏 就像我试图插入一条记录,但如果我传递电话号码 比如 8888888887(数据库中不存在),那么它工作正常
【问题讨论】:
-
你能分享你的 API 视图吗?
标签: django api django-models django-rest-framework django-views