Django Customizing Default User Model
2020. 8. 12. 19:29
장고를 사용하다보면 User Model에 새로운 정보를 추가해야 할 상황이 생긴다. 가장 쉽고 간편한 방법은 ProxyModel을 만드는 것이지만, 굳이 그렇게 하고 싶지 않은 상황이 올 수 밖에 없다. 최근 이러한 경우가 생겨서 관련 내용을 포스팅해보려고 한다.
User/models.py
# coding: utf-8
from django.db import models
from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager
from django.core.exceptions import ObjectDoesNotExist
from django.db.utils import IntegrityError
class UserManager(BaseUserManager):
def _create_user(self, username, email, password, **extra_fields):
email = self.normalize_email(email)
username = self.model.normalize_username(username)
user = self.model(username=username, email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, username, email, password, **extra_fields):
extra_fields.setdefault('blog', '')
return self._create_user(username, email, password, **extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
extra_fields.setdefault('blog', 'https://blog.ch4n3.kr/')
return super().create_superuser(username, email, password, **extra_fields)
class User(AbstractUser):
blog = models.CharField(max_length=256)
objects = UserManager()
class Meta:
pass
settings.py
AUTH_USER_MODEL = 'User.User'
이렇게 하고 나서 마이그레이션을 진행하면 상황에 맞는 User Model 을 재정의할 수 있다. 하지만 이러한 경우는 추천되지 않는 방법이다. 따라서 될 수 있는 한 ProxyModel을 사용하는 방법을 고려해야 한다.
'Codes > Python' 카테고리의 다른 글
Django How to delete superuser (0) | 2020.08.13 |
---|---|
Django Parsing Json in Function based view (0) | 2020.08.13 |
Python3 requests에서 r.text와 r.content의 차이 (0) | 2020.07.21 |
Django에서 Python Decorator 사용하기 (0) | 2020.07.21 |
백준 1018번 체스판 다시 칠하기 write-up (0) | 2020.04.03 |