【问题标题】:save() missing 1 required positional argument: 'self'save() 缺少 1 个必需的位置参数:'self'
【发布时间】:2020-07-16 20:44:03
【问题描述】:

我正在使用 django rest 框架注册和登录。我收到此错误 save() missing 1 required positional argument: 'self'

这是我的 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

如您所见,我的序列化程序中有“account.save()”,因为当您必须覆盖保存方法时,它非常重要,

这是我的观点.py

@api_view(['POST'])
def registration_view(request):
  if request.method == 'POST':
    serializer = clientnameSerializer(data=request.data)
    data={}
    if serializer.is_valid():
      account = clientname.save()
      data['response'] = "successfully registered a new user."
      data['email'] = account.email
      data['username'] = account.username
    else:
      data = serializer.errors
    return Response(data)

这是我尝试注册帐户时遇到的错误

Exception Value: save() missing 1 required positional argument: 'self'

这是完整的回溯

追溯:

File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/schoolsite/schoolsitedir/env/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
  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 = clientname.save()

【问题讨论】:

  • 以下哪一行会引发该错误?请也发布整个回溯。
  • @deceze 我更新我的问题,请参阅
  • clientname 是一个模型类?那你希望clientname.save() 做什么呢?
  • 是的,客户端名称是一个模型类,保存在我的数据库中
  • 我将 clientname.save() 用于将数据保存到我的数据库@deceze,我应该如何解决我的问题?

标签: django django-rest-framework


【解决方案1】:
account = clientname.save()

这毫无意义。你可能想要:

account = serializer.save()

【讨论】:

    【解决方案2】:

    您如何在前端应用程序中验证 password1==password2 以便仅提交密码。因为这是 REST API,你可能只是想在没有两个密码的情况下传递数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      • 2021-12-15
      • 2023-02-06
      • 2021-09-15
      • 2013-07-06
      • 2022-01-05
      相关资源
      最近更新 更多