我已经有工作了授权令牌使用django默认用户类注册,但我被要求向用户添加一个新字段,我调查AbtractUser、AbstractBaseUser等,我认为最好的解决方案是OneToOneField“method”。在
这就是我要做的:
在模型.py以下内容:
class Usuario(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE)
es_tecnico = models.BooleanField(name = 'es_tecnico', default = False, blank = True)
在序列化程序.py在
^{pr2}$在视图.py以下内容:
class UsuarioViewSet(viewsets.ModelViewSet):
lookup_field = 'id'
serializer_class = UsuarioSerializer
queryset = Usuario.objects.all().filter(es_tecnico = False)
class TecnicoViewSet(viewsets.ModelViewSet):
lookup_field = 'id'
serializer_class = UsuarioSerializer
queryset = Usuario.objects.all().filter(es_tecnico = True)
我想让它尽可能的简单,这就是我使用命令“python3”时得到的结果管理进行迁移:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/home/stalker/PycharmProjects/ingSoft/servidor/virenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
utility.execute()
File "/home/stalker/PycharmProjects/ingSoft/servidor/virenv/lib/python3.5/site-packages/django/core/management/__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/stalker/PycharmProjects/ingSoft/servidor/virenv/lib/python3.5/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/stalker/PycharmProjects/ingSoft/servidor/virenv/lib/python3.5/site-packages/django/core/management/base.py", line 332, in execute
self.check()
File "/home/stalker/PycharmProjects/ingSoft/servidor/virenv/lib/python3.5/site-packages/django/core/management/base.py", line 364, in check
include_deployment_checks=include_deployment_checks,
File "/home/stalker/PycharmProjects/ingSoft/servidor/virenv/lib/python3.5/site-packages/django/core/management/base.py", line 351, in _run_checks
return checks.run_checks(**kwargs)
File "/home/stalker/PycharmProjects/ingSoft/servidor/virenv/lib/python3.5/site-packages/django/core/checks/registry.py", line 73, in run_checks
new_errors = check(app_configs=app_configs)
File "/home/stalker/PycharmProjects/ingSoft/servidor/virenv/lib/python3.5/site-packages/django/contrib/auth/checks.py", line 29, in check_user_model
if not isinstance(cls.REQUIRED_FIELDS, (list, tuple)):
AttributeError: type object 'Usuario' has no attribute 'REQUIRED_FIELDS'
当我尝试其他stackoverflow问题的解决方案时,我得到以下错误:
AttributeError: type object 'Usuario' has no attribute 'USERNAME_FIELD'
如果有一个简单的方法来使用一个单独的领域,我会很欣赏它
以下是我现在有问题的观点: 视图.py以下内容:
class Registrar(mixins.CreateModelMixin, viewsets.GenericViewSet):
serializer_class = UsuarioSerializer
def create(self, request, *args, **kwargs):
# Creando un nuevo usuario
username = request.POST.get('username')
email = request.POST.get('email')
password = request.POST.get('password')
user = Usuario.objects.create_user(username, email, password)
user.save()
token = Token.objects.create(user=user)
return Response({'detail': 'El usuario fue creado con el token: ' + token.key})
class LoginView(mixins.CreateModelMixin, viewsets.GenericViewSet):
serializer_class = LoginSerializer
def create(self, request):
serializer = LoginSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data["usuario"]
django_login(request, user)
token, created = Token.objects.get_or_create(user=user)
return Response({"token": token.key}, status=200)
在您的例子中,您只是extending Django ^{} model ,所以您不应该重写
AUTH_USER_MODEL
。在从
settings.py
文件中删除这行代码:AUTH_USER_MODEL = "pedidos.Usuario"
{1>如果你想在你的代码中使用(正如我们所说,您只是扩展了Django}
User
模型)或者您可以使用方便的函数^{如果要获取
^{pr2}$User
的属性es_tecnico
,可以使用:或使用
get_user_model()
:编辑:
在}。在
Regitrar
类中使用User
模型而不是{我希望这会有帮助。在
相关问题 更多 >
编程相关推荐