[ Django ] 일대일관계로 User 모델 확장하기

6eom9eun·2024년 3월 3일

Django

목록 보기
3/6

일대일관계로 User 모델 확장하기

  • 로그인, 권한 부여 등과 상관이 없는 사용자 정보 필드를 저장할 때 사용.
# models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    introduction = models.TextField(default="안녕하세요", blank=True, null=True)  # 자기소개
    image = models.ImageField(upload_to='profile/', default='default_profile.png')  # 프로필 사진

    def __str__(self):
        return self.user.username
 
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.get_or_create(user=instance) # 모델에서, 인스턴스와 일치하는 거 찾기, 아니면 생성
  • 새 'User' 인스턴스가 생성되면, 해당 사용자에 대한 대응하는 'Profile' 인스턴스를 만들음.
  • 'User'와 'Profile'은 일대일관계(OneToOneField), 'User' 인스턴스 삭제될 때, 이와 연결된 'Profile' 인스턴스도 함께 삭제됨(on_delete=models.CASCADE)
  • 'User'가 'Profile'에서 PK 역할을 함(primary_key=True)

프로필 사진은

# settings.py
MEDIA_UTL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

이런 식으로 설정 해줘야 함.

profile
Dev learnnnnnN.......

0개의 댓글