-
[Django] AbstractUser를 사용한 UserModel 확장Backend/Django 2022. 7. 6. 11:51728x90
AbstractUser
django에서 제공하는 사용자 모델로 기본적인 사용자 정보에 대해 이미 구현되어 있어 편리하게 관련 기능을 구현할 수 있다. 하지만 추가적으로 필요한 사용자 데이터가 있을 수 있기 때문에 AbstractUser를 커스텀하여 사용할 수 있다.
기본적으로 제공하는 필드
- id : PK
- username
- first_name
- last_name
- password
- is_staff
- is_activate
- is_superuser
- last_login
- data_joined
User Model Custom
1. AbstractUser에 존재하는 필드 이외에 필요한 필드에 대해서 추가적으로 정의해준다.
- 추가적으로 존재하는 필드가 없긴했지만 새로 정의해주었다.
from django.db import models from django.contrib.auth.models import AbstractUser class Users(AbstractUser): id = models.AutoField(primary_key=True, db_column='user_id') username = models.CharField(max_length=20, unique=True) email = models.EmailField( verbose_name='email address', max_length=255, unique=True) password = models.CharField(max_length=300, null=False)
2. 정의한 User Model을 설정한다.
# settings.py AUTH_USER_MODEL = 'ncteApp.Users'
3. admin 페이지에서 확인하기 위해 User Model을 등록한다.
# admin.py from django.contrib.auth.admin import UserAdmin from .models import Users admin.site.register(Users, UserAdmin)
내가 겪은 문제
UserModel 설정의 경우 프로젝트를 생성한 초기에 해주는 것이 좋다. User Model을 따로 설정해주면 django가 테이블을 만들 때 auth_user 모델을 생성하지 않고 내가 정의한 모델로 만들어주기 때문이다.
즉 테이블을 만들기 전에 설정을 완료해주어야한다.
나의 경우 데이터베이스 연결 후 테이블을 이미 만든 후에 설정을 바꾸어 주었는데 makemigrations부터 다시 했지만 계속해서 오류가 났다. 이런 오류,,,,
Unknown column 'users.last_login' in 'field list'
구글링했지만 관련 에러가 많이 없기도 했고 해결책이 딱히 없었다.
결국 찾은 방식은 table을 재생성해주기!
프로젝트 완전 초기라 존재하는 데이터가 딱히 없다면 이 방식을 추천한다.
- migrations 폴더 삭제
- __pycache__ 폴더 안의 모델관련 파일 삭제
- database table drop
위를 모두 한 후에 다음 명령어로 테이블을 재생성한다.
python manage.py makemigrations [app name] python manage.py migrate
728x90'Backend > Django' 카테고리의 다른 글
[django] ubuntu 20.0.4에 mysqlclient 모듈 설치하기 (0) 2022.07.24 [Django] Rest Framework (0) 2022.05.08 [Django] MVT 패턴 (0) 2022.05.08 [Django] django 프로젝트 시작하기 (0) 2022.05.08