본문 바로가기

Development/Django

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

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