我可以在DRF中使用'set_password'方法,而我的模型中没有抽象用户吗?



我是DRF(和编程(的新手,我遇到了一个大问题。

我有这个型号:

class Player (models.Model):
user_id         = models.UUIDField (primary_key=True, default=uuid.uuid4, editable=False, blank=True)
username        = models.CharField (max_length=30, unique=True, null=False)
email           = models.EmailField (max_length=50, unique=True, null=False)
password        = models.CharField (max_length=100, null=True)
is_validated    = models.BooleanField (default=False)
created         = models.DateField (auto_now_add=True)
updated         = models.DateField (auto_now=True)

class Meta:
verbose_name = 'player'
verbose_name_plural = 'players'

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = [
'username'
]
def __str__ (self):
return self.username

这个序列化程序:

class PlayerSerializer(serializers.ModelSerializer):
class Meta:
model = Player
fields = ('username', 'email', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = Player(
email = validated_data["email"],
username = validated_data["username"]
)
user.set_password(validated_data["password"])
user.save()
return user
def validate_password (self, value):
if len (value) < 8 or len (value) > 30:
raise serializers.ValidationError('Password length must be between 8 and 30.')
return value

当我创建一个新玩家时,总是会遇到同样的问题:"Player"对象没有属性"set_password">

如何在不导入AbstractUser的情况下使用"set_password"?

我曾尝试用OnetoOnelink扩展用户模型,但没有成功。

我认为你应该在这里写一个python函数,将玩家的密码保存在models.py文件中,然后你可以调用你创建的函数,而不是调用set_password

你好,我认为这里的问题是Player模型没有一个名为set_password的定义方法,这与内置了该方法的defolat-djangoUser模型和AbstractUser不同。

您必须定义自定义set_passowrd方法

最新更新