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'.
관련 링크:
'장고 > MTV' 카테고리의 다른 글
User 모델에서 Username 을 Email 로 재정의 (0) | 2019.04.18 |
---|---|
try, except 와 if else 를 써야할 때 (0) | 2019.03.14 |
구문 분석 오류(could not parse ...) (1) | 2019.02.20 |
redirect 기능 (0) | 2019.02.19 |
쿼리의 Q 모델을 활용한 검색 기능 구현 (0) | 2019.02.06 |