일반적으로 모델을 만드는 방법을 알고 난 후에 보는 것을 추천합니다.
🚀 built-in User 모델을 custom User 모델로 대체하기
어떤 프로젝트들은 Django가 제공하는 built-in User 모델이 적절하지 않을 수 있습니다.
예를 들어 어떤 사이트는 유저 네임이 아닌 email로 유저 식별을 할 수도 있습니다.
또, 기본적으로 주어지는 User에는 프로필 사진도 없습니다.
장고에서는 AUTH_USER_MODEL 설정값을 제공함으로써 디폴트 유저 모델을 덮어쓰기(override)할 수 있습니다.
Django allows you to override the default user model by providing a value for the AUTH_USER_MODEL setting that references a custom model:
# config/setting.py에 들어가서 직접 입력해줍시다.
AUTH_USER_MODEL = 'myapp.MyUser'
생성한 App의 모델명을 적어주면 됩니다.
설정을 알았으므로 직접 유저 App을 만들고 대체해보도록하겠습니다.
# app 생성
django-admin startapp users
from django.db import models
from django.contrib.auth.models import AbstractUser
# models.Model을 상속하는 것이 아니라 django가 가지고 있는 AbstractUser를 상속
class User(AbstractUser):
pass
# config/setting.py에 들어가서 직접 입력해줍시다.
AUTH_USER_MODEL = 'users.User'
모델이 수정되었기 때문에 새로 migration 해주어야 합니다. (굳이 지금 할 필요는 없습니다. 마지막에 해도 됩니다)
# migrate를 만들고
python manage.py makemigrations
# migrate를 해줍니다
python manage.py migrate
이제 어드민 페이지에 무엇을 어떻게 보여줄지는 설정해야 합니다. users/admin.py를 수정합시다.
from django.contrib import admin
from . import models
# 앞서 만든 User 모델을 불러와서 데코레이터로 연결해줍시다.
@admin.register(models.User)
class UserAdmin(admin.ModelAdmin):
pass
그리고, config/setting.py에 등록된 앱에 Config를 추가해줍시다. Django에게 새로 만든 App을 알리는 것입니다.
본래 INSTALLED_APPS만 존재했지만 다음과 같이 built-in App과 custom된 App을 분리하여 적어주었습니다.
# config/setting.py
DJANGO_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
PROJECT_APPS = [
"users.apps.UsersConfig",
]
INSTALLED_APPS = DJANGO_APPS + PROJECT_APPS
runserver를 돌려보면 Users 모델이 추가된 것을 볼 수 있습니다.
users라는 App 하위에 Users라는 모델이 있는 모습입니다.
덤으로, users/models.py를 수정해서 모델을 수정해보겠습니다.
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
bio = models.TextField(default="")
당연히 모델이 수정되었으므로 migrate해주어야 합니다.
# migrate를 만들고
python manage.py makemigrations
# migrate를 해줍니다
python manage.py migrate
이제 어드민 패널로 들어가 모델을 확인해보면 Bio가 생겼음을 확인할 수 있습니다.
'Django, Flask > 🔫 Django' 카테고리의 다른 글
ForeignKey, ManyToManyField로 모델 연결하기 (0) | 2020.05.12 |
---|---|
core를 이용하여 반복되는 Abstract model 설계 및 활용 (0) | 2020.05.12 |
User Admin panel Customizing (0) | 2020.05.11 |
Model field/Meta 등을 이용해 model 설계하기 (0) | 2020.05.11 |
Django Start! / config/settings.py 살펴보기 (0) | 2020.05.11 |