[django | admin] Build a Backend REST API - 13

Hyeseong·2021년 2월 28일
0

Modify Django admin to support changing user model👯‍♀

Modify Django Admin to list our custom user model👮‍♀ 블로깅글의 연장선으로 작성해볼게요. 아직까지 관리자 페이지를 보기에는 완벽하지 않아요.

test_admin.py👨‍🚒

한가지 짚고 넘어가야할 점이 장고 외부에서 제공하는 모듈에 대한 테스트가 모두 필수적으로 선행되어야 하는 것은 아니에요. 선택사항인거조.
하지만 우리가 작성한 코드가 올바르게 작동하는지 그것만 테스트 해보면 될거에요.

    def test_user_change_page(self):
        """Test that the user edit page works"""
        url = reverse('admin:core_user_change', args=[self.user.id])
        # /admin/core/user/1
        res = self.client.get(url)
        self.assertEqual(res.status_code, 200)
    

reverse('admin:core_user_change', args=[self.user.id]) 메소드가 사용되는데 사실 /admin/core/user/1 이렇게 작동해요. 저기 숫자1은 args=[self.user.id]에서 파생되어 나온거에요.

res = self.client.get(url)이건 HTTP GET 메서드로 요청을 보냈다고 보면 될거에요. 그럼 res로 뭔가를 반환 받을테고 결국 self.assertEqual(res.status_code, 200) 를 통해서 200 코드인지 아닌지 확인하게 되요.

test를 돌려보게 되면 Unknown field(s) (date_joined, username, first_name, last_name) specified for User. Check fields/fieldsets/exclude attributes of class UserAdmin
라고 오류를 뱉어네요.

그럼 admin.py로 가볼게요.

admin.py👩‍🔬

fieldsets 튜플 변수를 만들게요. 상당히 브라켓이 많아서 헷갈릴거에요.
참고로 첫번째, 인덱스에 None이 보이는데 일단 타이틀에 해당되요.

미리 어떻게 만들어 질지 보여준다면 아래 이미지와 같아요.

어쨋든 코드 작성해보조. 이전에 작성했던 admin.py로 갈게요.
추가로 from django.utils.translation import gettext as _ 장고 엔진을 통해서 나중에 번역 기능까지 대비할 수 있는 부분이라 관습적으로 작성할 수 있도록 할게요.

...
from django.utils.translation import gettext as _
...

...
...
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        (_('Personal Info'), {'fields': ('name',)}),
        (
            _('Permissions'),
            {'fields': ('is_active', 'is_staff', 'is_superuser')}
        ),
        ( _('Impotant dates'),{'fields': ('last_login',)}),
    )
    add_fieldsets = (
        (None, {
            'classes':('wide',),
            'fields': ('email', 'password1', 'password2')
        }),
    )

다시 테스트를 돌려보면 이제는 OK 싸인이 떨어질거에요.

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글