Development/Django

[Django] User Model 확장 (3) - User 모델과 OneToOneField의 프로필 테이블 추가하기

Logan Moon 2021. 2. 24. 11:31
728x90

 

Django Logo

 

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

각각에 대응되는 것이 유일하므로 바로 접근할 수 있습니다.

[참고] ssungkang.tistory.com/entry/Django-%EA%B4%80%EA%B3%84%EB%A5%BC-%ED%91%9C%ED%98%84%ED%95%98%EB%8A%94-%EB%AA%A8%EB%8D%B8-%ED%95%84%EB%93%9C-ForeignKeyOneToOneFieldManyToManyField

 

[Django] 관계를 표현하는 모델 필드, ForeignKey,OneToOneField,ManyToManyField

model 을 설계하는데 있어서 관계는 뺴놓을 수 없는 중요한 개념입니다. 각 모델 간에 여러 관계를 정의함으로서 많은 걸을 구현 할 수 있게 됩니다. 관계는 총 3가지가 있으며 이번에는 바로 그

ssungkang.tistory.com

이 외에도 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