0

Ich bin mit rest_framework_social_oauth2OAuth2 benutzerdefinierte Basisbenutzermodell

Ich möchte eine minimale Änderung in oauth.User machen. Suchen Sie nach AbstractBaseUser von AbstractUser und fügen Sie PermissionMixin hinzu. Aber nichts funktioniert.

Meine app>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() 

Mein settings.py:

AUTH_USER_MODEL ='userTest.MyUser' 

Wie durch Tutorien angegeben, nicht der Fall war makemigrations und wandern.

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'

Antwort

0

Wir haben es geschafft. Ich werde hier ein vollständiges Beispiel für diejenigen, die eine Verbesserung in OAuth2.user machen wollen. In unserem Fall haben wir den Benutzernamen automatisch erstellt.

PS: Brauchen Klasse 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 
erstellen