[error] type object 'User' has no attribute 'USERNAME_FIELD'

subb_ny·2023년 1월 10일
0

🤯 error code

from django.db import models
from django.contrib.auth.models import AbstractBaseUser 
class User(AbstractBaseUser):
  pass

장고에 있는 기본 base 유저를 상속 받으려는데

type object 'User' has no attribute 'USERNAME_FIELD' 

위와 같은 error를 마주했다.
구글링 해보니 USENAME_FIELD를 넣으면 해결되는 error였지만,
왜 USENAME_FIELD를 넣어야하는지 이해가 되지 않았다.
AbstractUser는 USENAME_FIELD 없이도 에러가 생기지 않았기 때문이다.

🤩 solution

그 이유를 장고 공식문서에서 알 수 있었다.

AbstractBaseUser에는
USERNAME_FIELD = '고유식별이 될 컬럼' 이 필요하다
AbstractUser는 AbstractBaseUser와 다르게 이미 고유식별자가 포함되어 있어서 USERNAME_FIELD를 사용할 필요가 없다

from django.db import models
from django.contrib.auth.models import AbstractBaseUser 
class User(AbstractBaseUser):
  email = models.EmailField(unique=True,default="")
  USERNAME_FIELD = 'email'

위와 같이 이메일이라는 모델의 고유한 컬럼을 넣어준 뒤
USERNAME_FIELD를 넣어주면 해결된다.

공식문서 참조

❗️ error를 통해 느낀점

장고 공식문서 자주활용하기

장고는 공식문서가 정리가 상당히 잘 되어 있다.
웬만한 에러는 최대한 공식문서를 활용하면 해결 가능하다.
지금까지 stackoverflow에 의존하였는데
공식문서 찾아보는 것을 습관화해야겠다.

0개의 댓글