hotamul의 개발 이야기

[Django] User Model 커스터마이징 #5 (TDD) 본문

Dev./Django

[Django] User Model 커스터마이징 #5 (TDD)

hotamul 2022. 7. 6. 00:00

[Django] User Model 커스터마이징 #4 (TDD)에서 email serializing, Value 체크 기능을 추가했다. 이제 superuser를 생성하는 기능도 추가해보자.

[Django] User Model 커스터마이징 #1에서 설명했던 것처럼 UserManagercreate_superuser 메소드가 있다. 현재 User 모델을 커스터마이징 했기때문에 create_superuser 메소드도 커스터마이징 해줘야 한다.

create_superuser : test

먼저 test 코드를 작성해보자.


test_models.py에 아래와 같은 test를 추가해 보자.


def test_create_superuser(self):
    """Test creating a superuser"""
    user = get_user_model().objects.create_superuser(
        'test@example.com',
        'test123',
    )

    self.assertTrue(user.is_superuser)
    self.assertTrue(user.is_staff)

python manage.py test 명령어로 테스트를 실행시켜 보면 아래와 같이 실패함을 확인할 수 있다.

AttributeError: 'UserManager' object has no attribute 'create_superuser'

create_superuser

이제 test를 통과하기 위해 model.py 에서 BaseUserManager를 상속받아 직접 생성한 UserManagercreate_superuser메소드를 추가해보자.

...
def create_superuser(self, email, password):
    """Create and return a new superuser."""
    user = self.create_user(email, password)
    user.is_staff = True
    user.is_superuser = True
    user.save(using=self._db)

    return user
...

이전에 생성했던 create_user메소드를 활용해 user를 생성하고 is_staff, is_superuserTrue로 설정해줬다.

이제 다시 test를 실행해보면 성공!!


다음 포스팅은 커스터마이징 한 User를 admin 페이지에서 관리 할 수 있도록 하기 위해 UserAdmin을 커스터마이징 해보겠다.

Comments