Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

MyPrograming

User 모델 확장 본문

Python/Python Study

User 모델 확장

SeongWon 2020. 4. 5. 22:36
반응형

 

기본 User모델 필드

Django가 기본적으로 제공해주는 user 모델을 통해 필드에 접근하고 수정 및 관리하는 과정이 매우 편리하다는 것을 알 수 있다. 하지만 이 외에 다른 필드들을 필요로 할때가 있다. 그럴 때에는 user 모델 자체를 재정의하여 필요한 필드들만 추가해서 사용하는 방법이 있다.

 


1. 프로젝트 시작 전 (migration 실행 전)

 

1-1. models.py

 

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    profile_img_src = models.CharField(max_length=150, blank=True)
    profile_msg = models.TextField(max_length=500, blank=True)
    birth_date = models.DateField(null=True, blank=True)
  • AbstratUser : User모델의 동작은 그대로 유지하고 필드만 재정의 하고싶을 때 사용

 

1-2. settings.py

 

...
AUTH_USER_MODEL = 'AppName.User'
...

새로 정의한 User를 기존의 auth_user 모델을 대신하여 사용하기 위해 setting.py 에 다음 필드를 추가한다.

 

1-3. Terminal에서 migration

 

python manage.py makemigrations
python manage.py migrate

 


2. 프로젝트 시작 후 ( migration 실행한 경우)

 

user 모델 확장을 시도하기 이전에 migration을 한 적이 있다면, 이와 같은 에러가 발생한다.

새로운 앱을 migrate할 때는 빈 DB에 admin 앱과 새로운 앱이 같이 migration 되어서 문제가 없지만, 이미 admin 앱이 migration 된 상태에서 새롭게 재정의한 user 모델을 migrate 하려하면 에러가 발생한다. 따라서 새로운 DB를 생성하고 새로 migration 하는 방법이 깔끔하다.

 

2-2. settings.py

 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'New DB NAME',
        'USER': 'root',
        'PASSWORD': 'Password',
        'HOST': '127.0.0.1',
        'PORT': 3306,
    }
}

 

...
AUTH_USER_MODEL = 'AppName.User'
...

 

2-3. migration 파일 삭제

 

migration 파일은 DB를 새로 생성하고 설정에서 변경을 해줘도 프로젝트 파일에 그대로 남아있다. 따라서 그대로 migration을 하게 되면 곤란한 상황이 발생할 수도 있다. 그렇기 때문에 프로젝트 디렉토리에 들어가서 migration과 관련된 파일들을 삭제해주는 것이 좋다.

 

migrations 폴더에서 __pycache__ 폴더와 __init__.py 파일을 제외한 모든 파일을 삭제

 


 

3. 재정의된 user 모델 사용

 

Django에서 기본으로 제공하는 user모델

 

DB를 확인해보면 Django에서 기본으로 제공하는 User모델은 auth 프레임워크가 제공하는 것이기 때문에

from django.contrib.auth.models import User

이와 같이 import를 해주고 사용했다.

 

User 모델을 새로 재정의하여 확장하고 migrate를 하면 DB에 다음과 같이 테이블이 새로 생성된다.

새롭게 재정의하여 확장한 user 모델

이 새롭게 생성된 테이블은 auth가 아닌 확장이 이루어진 models.py가 있는 앱의 이름으로 user 테이블이 생성되는 것을 확인할 수 있다. 이를 사용하기 위해서는 아래와 같이 user 모델을 import 시켜줘야 한다.

from app_name.models import User
반응형

'Python > Python Study' 카테고리의 다른 글

Docstring & 어노테이션  (0) 2020.07.27
Static File & Media File  (0) 2020.04.08
해시와 솔트  (0) 2020.02.26
Pycharm views.py 복습  (0) 2020.02.17
URLconf 2계층 분류  (0) 2020.01.30