OAuth2 пользовательская базовая модель пользователя

Я использую rest_framework_social_oauth2

Я хочу сделать минимальное изменение в oauth.User. Выполните поиск для обмена AbstractBaseUser на AbstractUser и добавьте 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'

Как указано в учебниках, не делали миграций и миграций.

ERRO:

Файл "/Users/luisdemarchi/Git/django/.env/lib/python3.5/site-packages/django/db/models/manager.py", строка 277, в файле get self.model._meta.swapped,

AttributeError: Менеджер недоступен; 'auth.User' был заменен на 'userTest.MyUser'

1 ответ

Решение

Нам удалось. Я приведу здесь полный пример для тех, кто хочет улучшить 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
Другие вопросы по тегам