问题描述
您好,我有一个项目,在其中创建了从BaseUserManager继承的自己的用户模型。
class MyAccountManager(BaseUserManager):
def create_user(self,email,first_name,last_name,password=None):
if not email:
raise ValueError('Este es un campo requerido')
if not first_name:
raise ValueError('Este es un campo requerido')
if not last_name:
raise ValueError('Este es un campo requerido')
user = self.model(
email=self.normalize_email(email),first_name=first_name,last_name=last_name,)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self,password):
user = self.create_user(
email=self.normalize_email(email),password=password,)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user``
现在,我还想为用户添加通过Facebook登录的选项,但这给了我一个例外,说create_user()缺少2个必需的位置参数:“ first_name”和“ last_name”,因为我修改了模型以请求这些字段,而不是用户名和其他更改。我该如何做才能使其与我的自定义用户模型一起正常工作?
这是完整的追溯:
Traceback:
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\django\core\handlers\base.py" in _get_response
115. response = self.process_exception_by_middleware(e,request)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\django\core\handlers\base.py" in _get_response
113. response = wrapped_callback(request,*callback_args,**callback_kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
44. response = view_func(request,*args,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
54. return view_func(*args,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_django\utils.py" in wrapper
49. return func(request,backend,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_django\views.py" in complete
31. return do_complete(request.backend,_do_login,user=request.user,File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\actions.py" in do_complete
45. user = backend.complete(user=user,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\backends\base.py" in complete
40. return self.auth_complete(*args,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\utils.py" in wrapper
251. return func(*args,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\backends\facebook.py" in auth_complete
111. return self.do_auth(access_token,response,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\backends\facebook.py" in do_auth
153. return self.strategy.authenticate(*args,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_django\strategy.py" in authenticate
107. return authenticate(*args,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\django\contrib\auth\__init__.py" in authenticate
73. user = backend.authenticate(request,**credentials)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\backends\base.py" in authenticate
80. return self.pipeline(pipeline,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\backends\base.py" in pipeline
83. out = self.run_pipeline(pipeline,pipeline_index,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\backends\base.py" in run_pipeline
113. result = func(*args,**out) or {}
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\pipeline\user.py" in create_user
75. 'user': strategy.create_user(**fields)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_core\strategy.py" in create_user
53. return self.storage.user.create_user(*args,**kwargs)
File "C:\Users\Roberto\Desktop\radlab\dev\radlab_site\lib\site-packages\social_django\storage.py" in create_user
80. user = cls.user_model().objects.create_user(*args,**kwargs)
Exception Type: TypeError at /oauth/complete/facebook/
Exception Value: create_user() missing 2 required positional arguments: 'first_name' and 'last_name'
解决方法
我在读取了库中的一堆文件后才发现它,原来您只需要向您的USER_FIELDS = ['field1','field2',...,'fieldn']
文件中添加以下代码行settings.py
即可告诉应用程序您已经修改了create_user()函数以使用USER_FIELDS
中的字段。