0

我使用rest_framework_social_oauth2OAuth2用户自定义的用户基本模型

我想在oauth.User变化最小。搜索以通过AbstractUser交换AbstractBaseUser并添加PermissionMixin。但没有任何工作。

我的应用程序>models.py

from django.db import models 
from django.contrib.auth.models import AbstractUser, PermissionsMixin, UserManager 

class MyUser(AbstractUser, PermissionsMixin): 
     country_code = models.CharField(max_length=10, blank=True) 
     objects = UserManager() 

settings.py

AUTH_USER_MODEL ='userTest.MyUser' 

如图所示的教程,而不是做makemigrations和迁移。

ERRO:

File "/Users/luisdemarchi/Git/django/.env/lib/python3.5/site-packages/django/db/models/manager.py", line 277, in get self.model._meta.swapped,

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'userTest.MyUser'

回答

0

我们管理。对于那些想要在OAuth2.user中进行改进的人,我会在这里给出一个完整的示例。在我们的情况下,我们自动创建用户名。

PS:需要创建类AuthManager()

userTest(对myApp)> models.py

import uuid as uuid 
from django.contrib.auth.models import BaseUserManager, AbstractUser 
from django.db import models 

from rest_framework import exceptions 

class AuthManager(BaseUserManager): 
    def create_user(self, email, username=None, password=None): 
     if not email: 
      raise exceptions.AuthenticationFailed('Users must have an username') 

     username = email.split("@")[0] 

     user = self.model(username=username) 
     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_superuser(self, email, password, username=None): 
     user = self.create_user(email=email, password=password) 
     user.is_admin = True 
     user.save(using=self._db) 
     return user 

class User(AbstractUser): 
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    is_test = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    objects = AuthManager() 

userTest(对myApp)> views.py

from rest_framework import viewsets 

from apps.userTest.models import User 
from apps.userTest.serializers import UserSerializer 

class UserViewSet(viewsets.ReadOnlyModelViewSet): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer