일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알고리즘 공부방법
- 연결요소
- 자료구조
- UI한글변경
- string 함수
- Django의 편의성
- double ended queue
- 이분그래프
- 2557
- correlation coefficient
- 구조체와 클래스의 공통점 및 차이점
- c++
- vscode
- 시간복잡도
- Django란
- 매크로
- Django Nodejs 차이점
- 프레임워크와 라이브러리의 차이
- scanf
- 표준 입출력
- getline
- k-eta
- string 메소드
- 입출력 패턴
- 백준
- iOS14
- EOF
- 장고란
- 입/출력
- 엑셀
Archives
- Today
- Total
Storage Gonie
Django (19*) users앱의 User 모델 설명 및 확장 본문
반응형
디폴트로 생성되어있는 users앱의 User 모델 설명
- Cookiecutter로 프로젝트를 생성했다면 users앱이 디폴트로 생성되어 있을 것이고,
그 밑의 models.py 파일을 살펴보면 User모델이 정의되어 있는 것을 볼 수 있을 것이다.
이 모델은 허가된 사람들 즉, 회원가입한 사람들의 정보를 저장하는 것으로 사용된다.
이것에 사용되는 모델은 settings/base.py에서 디폴트로 지정되어 있는 것인데 이를 변경할 수 있기도 하다.
(이는 그대로 두며, 기존의 것을 확장하여 사용할 것임)
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
class User(AbstractUser):
# First Name and Last Name do not cover name patterns
# around the globe.
name = models.CharField(_("Name of User"), blank=True, max_length=255)
def get_absolute_url(self):
return reverse("users:detail", kwargs={"username": self.username})
- 이 User 모델은 AbstractUser 클래스를 상속받아 정의된 모델인데, 이를 통해 상속받는 것들은 다음과 같은 것들이 있다.
사용자 정보에 대한 것들인데 username, first_name, last_name, email, date_joined 등이 있다.
(상속받는 것 : command + AbstractUser클릭)
class AbstractUser(AbstractBaseUser, PermissionsMixin):
"""
An abstract base class implementing a fully featured User model with
admin-compliant permissions.
Username and password are required. Other fields are optional.
"""
username_validator = UnicodeUsernameValidator()
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[username_validator],
error_messages={
'unique': _("A user with that username already exists."),
},
)
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=150, blank=True)
email = models.EmailField(_('email address'), blank=True)
is_staff = models.BooleanField(
_('staff status'),
default=False,
help_text=_('Designates whether the user can log into this admin site.'),
)
is_active = models.BooleanField(
_('active'),
default=True,
help_text=_(
'Designates whether this user should be treated as active. '
'Unselect this instead of deleting accounts.'
),
)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
objects = UserManager()
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
users앱의 User 모델 확장
회원정보에 website, bio, phone, gender를 추가하고자 한다.
# Constant
GENDER_CHOICES = (
('male, 'Male'),
('female, 'Female'),
('not-specified', 'Not specified'),
)
# 확장하여 추가해줄 필드
website = models.URLField(null = True)
bio = models.TextField(null = True)
phone = models.CharField(max_length=140, null = True)
gender = models.CharField(max_length=80, choices = GENDER_CHOICES, null = True)
- null이 가능하게 하는 이유는 기존에 존재하던 회원들은 이 필드들이 없어서 비어있을 텐데,
이 설정을 주지 않으면 오류가 발생할 것이므로.
1. User모델에 필드 추가
from django.db import models
class User(AbstractUser):
# First Name and Last Name do not cover name patterns
# around the globe.
name = models.CharField(_("Name of User"), blank=True, max_length=255)
# Constant
GENDER_CHOICES = (
('male', 'Male'),
('female', 'Female'),
('not-specified', 'Not specified'),
)
# 확장하여 추가해줄 필드
website = models.URLField(null=True)
bio = models.TextField(null=True)
phone = models.CharField(max_length=140, null=True)
gender = models.CharField(max_length=80, choices=GENDER_CHOICES, null=True)
def get_absolute_url(self):
return reverse("users:detail", kwargs={"username": self.username})
2. 변경사항을 DB에 반영
python manage.py makemigrations
python manage.py migrate
만약 반영하는 과정 없이 admin 사이트에 접속하려고 시도한다면 아래와 같이 colum들을 찾을 수 없다는 에러가 발생할 것이다.
반응형
'웹개발 > 인스타 클론 (1) Django' 카테고리의 다른 글
Django (21) Model Relationships(one to many, many to many 관계) (1) | 2019.06.28 |
---|---|
Django (20*) images앱의 Image, Comment 모델 생성(Abstract base class 이용) (0) | 2019.06.27 |
Django (18*) Admin 패널 로그인을 위한 super user 생성 (0) | 2019.06.25 |
Django (17*) Model 수정 반영을 위한 Migratiton (0) | 2019.06.25 |
Django (16) Model에 대한 이해 및 Model Operations (0) | 2019.06.25 |
Comments