Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以用';设置密码';在我的模型中没有AbstractUser的DRF中的方法?_Python_Oop_Django Rest Framework - Fatal编程技术网

Python 我可以用';设置密码';在我的模型中没有AbstractUser的DRF中的方法?

Python 我可以用';设置密码';在我的模型中没有AbstractUser的DRF中的方法?,python,oop,django-rest-framework,Python,Oop,Django Rest Framework,我是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)

我是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
class PlayerSerializer(serializers.ModelSerializer):
类元:
模型=玩家
字段=(‘用户名’、‘电子邮件’、‘密码’)
extra_kwargs={'password':{'write_only':True}
def创建(自我验证的_数据):
用户=玩家(
电子邮件=已验证的_数据[“电子邮件”],
用户名=已验证的_数据[“用户名”]
)
用户。设置密码(已验证的密码数据[“密码”])
user.save()
返回用户
def验证_密码(自身,值):
如果len(值)<8或len(值)>30:
引发序列化程序。ValidationError('密码长度必须介于8和30之间')
返回值
当我创建一个新玩家时,总是会遇到同样的问题: “玩家”对象没有“设置密码”属性

如果不导入AbstractUser,我如何使用“设置密码”


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

你好,我认为这里的问题是
Player
模型没有一个定义好的方法叫做set\u password,不像default django
User
模型和
AbstractUser
内置了该方法

您必须定义一个自定义的
set\u passowrd
方法

好的,多亏了,我可以保存密码,但它不会保存哈希值

我尝试了来自
django.contrib.auths.hasher的
make_password
,但它不起作用,因为我的
序列化程序
创建方法


可能会发生什么事?

我认为您应该在这里编写一个python函数,将玩家的密码保存在
models.py
文件中,然后不调用
set\u password
您可以调用您创建的函数。

def set\u password(self,password):self.password=密码返回密码类似的内容?