2019년 1월 9일 수요일

[django] UserModel확장 - AbstractUser을 상속하여 구성

기본정보
from django.contrib.auth.models import AbstractUser
AbstractUser를 (Model) 상속받아, 기존의 User의 기본기능을 다 사용하면서, 필드를 추가 한다.  제일 깔끔하긴 한것 같다. 그런데, 처음 시작할때만 유용하고, 유지보수 프로젝에서는 사용이 힘들수 있으니 one-to-one 맵핑으로 하는것도 익혀 두어야 한다.


중요흐름
1. AbstractUser를 상속받는 Model을 하나 만든다. 이를 위해서 App도 만든다
2. setting.py 파일에 만든 User를 등록 시킨다. Project의 기본 User를 등록 시킨다.
3. 기존에 있던 DB는 model이 바뀌면서 잘되지 않으면 다 지우고 초기화 한다.
4. 기본적으로 있는 view/form/등을 새롭게 만들어진 User를 사용 하도록 변경한다.



관련페이지

  • https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
  • https://medium.com/@whj2013123218/%EC%9E%A5%EA%B3%A0-django-%EC%9C%A0%EC%A0%80-%EB%AA%A8%EB%8D%B8-user-model-abstractuser%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-c3cabb4815ce (db의 초기화)
  • https://wikidocs.net/9926 (db의 초기화)
  • https://tutorial.djangogirls.org/ko/django_forms/



1. AbstractUser를 상속받는 Model을 하나 만든다. 이를 위해서 App도 만든다

startapp custom 을 만들고, 생긴 models.py에  아래 추가 하여 만든다.

from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    parent_info = models.TextField(max_length=500, blank=True)
    address = models.CharField(max_length=30, blank=True)
    first_date = models.DateField(null=True, blank=True)
cs


2. setting.py 파일에 만든 User를 등록 시킨다. Project의 기본 User를 등록 시킨다.

AUTH_USER_MODEL = 'custom.User'

INSTALLED_APPS = [
'custom',

3. 기존에 있던 DB는 model이 바뀌면서 잘되지 않으면 다 지우고 초기화 한다.

관련페이지들을 참고
이때 allauth에 관련덴 소셜앱 정보와 root 기존의 아이디들이 다 사라짐으로
처음에 복구 해야 줘야 한다.


4. 기본적으로 있는 view/form/등을 새롭게 만들어진 User를 사용 하도록 변경한다.

//url.py
url(r'^accounts/signup/$', NewSignupView1.as_view(), name='signup'),
//views.py
from allauth.account.views import SignupView
from custom.forms import NewSignupForm
class NewSignupView1(SignupView):
    form_class = NewSignupForm
//forms.py
from allauth.account.forms import SignupForm
from django import forms
class NewSignupForm(SignupForm):
    parent_info = forms.CharField(max_length=500)
    address = forms.CharField(max_length=30)
    first_date = forms.DateField()
cs

댓글 없음:

댓글 쓰기