ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] AbstractUser를 사용한 UserModel 확장
    Backend/Django 2022. 7. 6. 11:51

    AbstractUser

    django에서 제공하는 사용자 모델로 기본적인 사용자 정보에 대해 이미 구현되어 있어 편리하게 관련 기능을 구현할 수 있다. 하지만 추가적으로 필요한 사용자 데이터가 있을 수 있기 때문에 AbstractUser를 커스텀하여 사용할 수 있다.

     

    기본적으로 제공하는 필드

    • id : PK
    • username 
    • first_name
    • last_name
    • email
    • 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

     

     

    '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

    댓글

Designed by Tistory.