728x90
User 모델과 OneToOneField 관계의 프로필 테이블 추가하기
개요
기존 User 모델과 OneToOneField로 일대일관계를 맺는 Django 모델을 추가해서 사용자에 관한 정보를 저장하는 것이다.
더보기
OneToOneField란?
OneToOneField는 1:1 관계를 의미합니다. 저는 이 관계를 django에 기본적으로 정의되어 있는 User 모델과 이를 확장(customizing)하여 새로 만드는 Profile 모델을 연결해 줄 때 자주 사용합니다.
- django 에서의 사용 예시
class User(AbstractBaseUser):
# 생략
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
해당 관계는 두 모델 중 어느 쪽에서 선언하여도 무방합니다.
- 상대 모델에 접근
user.profile
profile.user
각각에 대응되는 것이 유일하므로 바로 접근할 수 있습니다.
이 외에도 Foreign Key 와 ManyToManyField 도 있지만 다음 기회에 설명드리겠습니다.
Django의 인증 시스템을 그대로 활용하고 로그인, 권한 부여 등과 상관이 없는 사용자 정보 필드를 저장하고자 할 때 사용하는 기법이다.
구현
Profile 모델을 구현한다.
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
728x90
'Development > Django' 카테고리의 다른 글
[Django] User Model 확장 (5) - AbstractBaseUser 모델 상속한 사용자 정의 User 모델 사용하기 (0) | 2021.02.24 |
---|---|
[Django] User Model 확장 (4) - AbstractUser 모델 상속한 사용자 정의 User 모델 사용하기 (0) | 2021.02.24 |
[Django] User Model 확장 (2) - 프록시 모델 사용하기 (0) | 2021.02.23 |
[Django] User Model 확장 (1) - 4가지 방법 (0) | 2021.02.23 |
[Django] Web Socket (0) | 2021.02.09 |