auth.user 커스텀 유저 모듈 삽질기 (부제:끝없는 삽질) 1.5버전부터는 유저 모

 
Hyoungchul Shim

auth.user 커스텀 유저 모듈 삽질기 (부제:끝없는 삽질)

1.5버전부터는 유저 모듈을 맘대로 고칠 수 있다고 하여..

지금까지는 프로파일 모델과, 추가정보를 저장하는 모델 이렇게 두개를 user에 연결시켜서
related_name=‘profile’ 로 하여 user.profile… 같은 방식으로 사용했는데
코드가 쓸데없이 길어져서 이부분을 user테이블에 통합시켰습니다

http://www.caktusgroup.com/blog/2013/08/07/migrating-custom-user-model-django/

이곳에 매우 상세히 나오지만, 간추린 삽질 기록을 올리자면…

1. models.py에 커스텀 유저 모델 생성

위 예제엔 CustomUser 라는 모델로 만들어서 이름 충돌이 없는데
전 User 라고 하고 싶었기에 그렇게 했습니다.
대충 django.contrib.auth.models 안에 있는걸 가져오시면 됩니다.
우선은 새 구조로 바꾸는게 중요하기 때문에..

models.py 상단에

from django.contrib.auth.models import User as OldUser

다음 기존의 User 라고 걸린 부분을 모두 OldUser로 수정하고 schemamigraiton 을 하시면
PermissionsMixin 내의 groups, user_permissions 이 충돌났다고 뻘건 글씨가 뜹니다.
PermissionsMixin을 임시로 models.py에 붙여넣고 groups, user_permissions에 related_name을 대강 지정해줍니다.

저는 admin을 쓰지 않으니 패스하고, schemamigration 한번 때려 주시고 나서 datamigration 을 생성해줍니다.
위 예제처럼 기존 auth.user에서 새 모델로 데이터를 옮겨주는 코드 짜주시고 migration.

2. auth의 south화
기존에는 auth는 south 밖에서 관리되는데, 이를 south로 옮겨줍니다. auth_user, auth…테이블들을 삭제하기 위해서지요.
./manage.py convert_to_south auth
이후에 schemamigration, migration 한번씩 해주시면 필요없는 테이블이 날라갑니다.

3. 설정 수정
settings.py의 AUTH_USER_MODEL를 ‘앱이름.모델명’ 으로 교체해줍니다. OldUser라고 했던 부분도 모두 User로.
이제 schemamigration/migration 한번씩 해주시면 그전까지 auth_user 에 걸려있던 FK들이 새 모델로 옮겨가요.

4. 잡일
models.py에 임시로 넣어뒀던 PermissionsMixin을 날려버리고 django.contrib.auth.models 에서 불러오게 합니다.

요기까지가 새 커스텀 유저 모듈로 마이그레이션 하는 방법이며, 이 뒤로 기존 profile의 데이터를 user로 옮겨주시면 됩니다.
저는 profile에서 자주 쓰는 필드들을 user로 넣어놨고, 추가정보 테이블 데이터를 profile로 옮길 예정입니다.
아무래도 user는 자주 부르는데 덩치가 크면 왠지 안좋을것 같다는 생각이 들어서요.

이렇게 세번째 삽질기를 썼는데 생각해보니 datamigration 이란게 있다는것도 이번에 처음 알았고, 장고 쓴지 거의 3년 다 됐는데 초짜냄새 펄펄나네요 어휴..

그래도 삽질은 우리를 강하게 만들어준다고 생각하기 때문에, 생각날때마다 꾸준히 삽질기 올리려구요 ㅇㅇ

잡설1. schemamigration 이거 타이핑 하기 진짜 어렵지 않나요
잡설2. 치킨 먹고 싶네요…

  • Hyun-woo Park

    schemamigration 하고 나서 migrate 해야 하는데 늘 migration 하는 그렇고 그런 장고 인생이죠 (…)
    안 틀리고 입력하기 어려웠던 걸로 치면 flush privileges 수준입니다 ㅋㅋㅋ

    Hyoungchul Shim

    박현우 사실 privileges 이거 저 아직도 못외워서 매번 구글에 물어본다는..

    Moon Soo Kim

    아 privileges 에 대한 내용은 정말 공감할 수 밖에 없는 코멘트들이군요

    박영록

    typing은 bash completion을 이용하면 좋습니다. sc탭~ http://ecolemodev.wikinamu.com/Django#header-1.4

    Jung Kyoung Up

    박영록 덧글을 다시 답니다. 저장소 위치가 바뀌어서 링크해주신 문서에선 못찾고 깃헙에서 찾았습니다. https://github.com/django/django/blob/master/extras/django_bash_completion

    Hyoungchul Shim

    박영록 정경업 오 이거 좋네요 오오 ㅋㅋㅋㅋ 이제 마이그레이션 할때 손가락 꼬일일은 없을듯ㅋㅋㅋㅋㅋㅋ

    박영록

    정경업 링크 고쳤습니다. 감사합니다~

    Han Cold Kim

    박영록님이 추천해주신 베쉬 컴플리션 진짜 꿀입니다 강추 ㅎㅎ

    Han Cold Kim

    /etc/bash_completion.d 디렉토리가 있으면 거기에 넣어줘도 됩니다.

    김슬

    UserProfile -> 커스텀 User 모델의 엄청 소중한 삽질기군요.

    Han Cold Kim

    제 코드도 혹시나 참고가 되실까 하여 올려봅니다…

    사실 제 코드는 아니죠 저도 여기저기 참고한거니까… ㅋㅋ

    Hyoungchul Shim

    김슬 한심한 고난의 기록이지요 (눈물)

    Hyoungchul Shim

    김한기 좋은 정보 감사합니다. 역시 다들 비슷하게 작성하는군요! ㅋㅋ

Advertisements