django - username에 verbose_name 적용하기
1 minute read
verbose_name
은 Django 모델을 admin 페이지에서 조회할 때, 필드명 대신 알아보기 쉬운 단어로 지정하는 것이다.
일단적으로 사용법은 아래와 같다.
from django.db import models
class User(models.Model):
name = models.CharField(max_length=20, verbose_name='이름')
Custom 모델을 구현할때 AbstractUser
을 상속받으면, 기본적인 것은 Django가 구현해주고, 추가적인 필드들을 추가할 수 있다.
username
와 같은 Django가 기본적으로 구현해 주는 필드에 적용하려면, AbstractBaseUser
을 상속하고 USERNAME_FIELD
로 해당 필드를 지정해주어야 한다.
from django.contrib.auth.models import AbstractBaseUser
class User(AbstractBaseUser):
custom_username = models.CharField(max_length=20, verbose_name='이름')
USERNAME_FIELD = 'custom_username'
위처럼 구현하게 되면 migrate는 정상적으로 진행된다. 하지만 user나 superuser를 생성하려하
AttributeError: 'Manager' object has no attribute 'get_by_natural_key'
에러가 발생한다.
해당 모델의 커스텀 매니저를 구현하고, objects
에 커스텀 매니저를 지정해주면 된다.
from django.contrib.auth.models import UserManager
class CustomUserManager(UserManager):
pass
class CustomUser(AbstractBaseUser):
objects = CustomUserManager()
...
이제 superuser를 생성해보자!
TypeError: create_superuser() missing 2 required positional arguments: 'username' and 'email'
마지막으로 create_user, create_superuser 메서드도 재정의해주면 됩니다.
재정의 방법은 Django Docs으로 대신합니다. 씨익.
I feedback.
Let me know what you think of this article in the comment section below!
Let me know what you think of this article in the comment section below!
comments powered by Disqus