我真的被困住了。基本上,我想让用户更改他的电话号码。他只需要输入他当前的密码和一个新的电话号码。我想将用户传递给init函数,以便在此过程中验证他当前的密码。但它给了我上面的错误信息。
我的serializers.py是:
class ChangePhoneSerializer(serializers.Serializer):
'''
Change my phone number
'''
password_current=serializers.CharField(max_length=16,allow_blank=False,required=True)
new_phone=serializers.CharField(max_length=13,required=True,allow_blank=False)
def __init__(self,*args,**kwargs):
self.user=kwargs.pop('user')
def validate(self,data):
phone=data['new_phone']
pwd_current=data['password_current']
errmsg=''
if not pwd_current:
errmsg=str(_('Current password must be given'))
else:
if not self.user.check_password(pwd_current):
errmsg=_('Current password is incorrect')
if errmsg:
raise serializers.ValidationError(errmsg)
return data
在我的views.py中:
data=request.data
serializer=ChangePhoneSerializer(user=request.user,data=data)
if serializer.is_valid():
#do stuff to change the phone
但是它让我爱上面的错误。当我没有使用序列化器时它工作正常。
答案 0 :(得分:4)
您在super()
方法中错过了对__init__()
的来电:
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super(ChangePhoneSerializer, self).__init__(*args, **kwargs)