AbstractUser vs AbstractBaseUser
AbstractBaseUser를 상속하게 되면
Class :pass
꼴랑 2개밖에 안던져준다(id는 자동생성 되는 필드니까). 이를 상속해서 유저 모델을 구축한다면 세밀한 컨트롤이 가능하지만 세그만큼 손도 많이 간다. 만약 페이스북 이메일 인증(permission)을 통한 가입을 하고 싶다면 AbstractBaseUser
를 사용해야 한다. 상속받는 클래스틀 타고 들어가면 아래처럼 구현되어있다.
AbstractUser를 상속하게 되면
username =first_name =last_name =email =is_staff =is_active =date_joined =
settings.py
(예시) AUTH_USER_MODEL = '앱이름.클래스이름'AUTH_USER_MODEL = 'user.MyUser'
settings.py
에 AUTH_USER_MODEL
='모듈.클래스이름'을 기입해줘야 한다. 이후 makemigrations
, migrate
를 해주게 되면 아래의 3개 테이블이 생긴다.
user_myuser
user_myuser_groups
user_myuser_groups_permisson
AbstractBaseUser vs AbstractUser
User 모델 확장을 실험해보던 와중에 조금 특이한 점을 발견했다.
AbstarctBaseUser
를 상속할 때는 settings.py
에 AUTH_USER_MODEL
을 설정해줄 필요가 없었다.
그런데 AbstractUser
를 상속할 때는 반드시 settings.py
에 반드시 AUTH_USER_MODEL
을 설정해줘야 migrate
가 진행되었다.
AbstractBaseUser
를 migrate했을 때 생겨나는 기본 테이블이다. 테이블이 12개다. auth_user
도 있지만 user_myuser
도 있다.
AbstractUser
를 migrate했을 때 생겨나는 기본 테이블이다.
가장 큰 차이점은 groups
와 user_permission
테이블이 myuser에게 넘어갔다.
왜 이런 차이가 발생할까?
그 이유를 곰곰히 생각해보니 createsuperuser
를 할 때 이유가 있지 않을까 생각했다. AbstractBaseUser
는 필드를 딸랑 2개(패스워드와 마지막 로그인)를 던져준다.
이때 createsuperuser를 하게 되면 username
과 password
를 기입해야하는데 이를 저장할 테이블이 없기 없다.
1. AbstarctUser 상속시 발생한 에러
현상
Add or change a related_name argument to the definition for ~ 문제가 발생한다.
from django.contrib.auth.models import AbstractUserpass
원인
참고한 글
User 모델 확장 방법 4가지
https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html영어로 되어있지만 아주아주 자세하게 나와있다.
'프로그래밍 > Django' 카테고리의 다른 글
[Django] Django allauth 유저 모델 커스텀하기 (0) | 2017.07.22 |
---|---|
[Django] Django-allauth를 통한 페이스북 회원가입 및 로그인 (2) | 2017.07.20 |
[Django] Django + Celery + Redis 이용하기 (5) | 2017.07.15 |
[Django] Django Rest Framework(DRF) 알아보기 1부 (2) | 2017.07.13 |
[Django] settings 환경 분리하기 (0) | 2017.07.11 |