python - 'clientname' 对象没有属性 'set_password'
问题描述
我正在使用 django rest 框架、注册和登录。我收到这个错误'clientname'对象没有属性'set_password'我该如何解决这个问题?
这是我的serializers.py
class clientnameSerializer(serializers.ModelSerializer):
password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)
class Meta:
model = clientname
fields = ('id','username','password', 'password2' , 'email')
ordering = ['id',]
extra_kwargs = {
'password': {'write_only': True}
}
def save(self):
account = clientname(
email=self.validated_data['email'],
username=self.validated_data['username'],
)
password = self.validated_data['password']
password2 = self.validated_data['password2']
if password != password2:
raise serializers.ValidationError({'password': 'Passwords must match.'})
account.set_password(password)
account.save()
return account
这是我的意见.py
@api_view(['POST',])
def registration_view(request):
if request.method == 'POST':
serializer = clientnameSerializer(data=request.data)
data={}
if serializer.is_valid():
account = serializer.save()
data['response'] = "successfully registered a new user."
data['email'] = account.email
data['username'] = account.username
else:
data = serializer.errors
return Response(data)
这是我的完整追溯
追溯:
File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
54. return view_func(*args, **kwargs)
File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/django/views/generic/base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
505. response = self.handle_exception(exc)
File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
465. self.raise_uncaught_exception(exc)
File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/rest_framework/views.py" in raise_uncaught_exception
476. raise exc
File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
502. response = handler(request, *args, **kwargs)
File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/rest_framework/decorators.py" in handler
50. return func(*args, **kwargs)
File "/home/schoolsite/schoolsitedir/Homepage/api/views.py" in registration_view
25. account = serializer.save()
File "/home/schoolsite/schoolsitedir/Homepage/api/serializers.py" in save
30. account.set_password(password)
这是我的客户名称模型
class clientname(models.Model):
username = models.CharField(max_length=500, null=True,blank=True)
password = models.CharField(max_length=500, null=True,blank=True)
email = models.CharField(max_length=500, null=True,blank=True)
解决方案
set_password()
是 DjangoUser
模型中的一种方法。看这里,如果你想使用自定义用户,你必须创建一个自定义用户模型来扩展 Django 的用户模型。
注意:如果您正在寻找自定义用户模型,这可能会对您有所帮助
推荐阅读
- python - 在 Pytorch 中转换自定义数据集时出错
- ios - 如何获取与iphone配对的蓝牙设备信息
- linux - GitLab CI/CD 管道在构建 Debian 包时找不到 GCC
- android - Android Studio 解决方法:基于文件的资源名称只能包含小写 az、0-9 或下划线
- javascript - 设置间隔并对随机浮点数求和
- java - 内存 API 编排框架的选项
- javascript - 输入掩码 IE11 问题
- artifactory - 如何从 JFrog 工件中恢复/恢复已删除的工件
- android - 使用 android app bundle 后未找到 Android 第三方库
- android - 剪贴板:TransactionTooLargeException:数据包大小