본문으로 바로가기

AbstractBaseUser 모델

category 장고/MTV 2019. 3. 1. 19:32

AbstractBaseUser 모델


코드

- 이메일을 기본 필드로 사용하는 방법

from django.contrib.auth.models import BaseUserManager, PermissionsMixin, AbstractBaseUser
from django.db import models


class UserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        user = self.model(email=email, **extra_fields)
        user.set_password(password=password)
        user.save(using=self._db)

        return user


class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    object = UserManager()

    USERNAME_FIELD = 'email'


AbstractBaseUser 모델을 상속받아 처리해야 하는 이유


AbstractUser 모델은 기본 필드 모델을 새로 정의할 수 없다.


그렇기 때문에 정말 깊숙한 코드(?)로 들어가서 수정해야 하는데 바로 AbstractBaseUser 모델을 상속받아 처리해야 된다.


[AbstractUser 모델을 사용할 경우 발생하는 에러]

SystemCheckError: System check identified some issues:

ERRORS:
core.User.is_superuser: (models.E006) The field 'is_superuser' clashes with the field 'is_superuser' from model 'core.user'.
core.User: (auth.E002) The field named as the 'USERNAME_FIELD' for a custom user model must not be included in 'REQUIRED_FIELDS'.


관련 링크:

stack over flow