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