Post 모델을 이미 생성한 상태라고 가정.
django-admin startapp account
새로운 app을 만들고요
INSTALLED_APPS = [
...
'account', # 추가("account.apps.AccountConfig"도 가능)
]
프로젝트 serttings.py도 수정을 해야겠죠
사실 장고에서는 기본적으로 User 모델을 제공
하지만 이 모델은 최소한의 기본적인 기능만을 제공
따라서 기본 field 이외의 커스터마이징이 필요한 경우 이를 확장해서 사용
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
college = models.CharField(max_length=32, blank=True)
major = models.CharField(max_length=32, blank=True)
def __str__(self):
return f"id={self.id}, user_id={self.user.id}, college={self.college}, major={self.major}"
account/models.py도 다음과 같이 작성을 합니다.
- User Model을 One-to-One modeling함으로써 User Model 수정하지 않고 확장시킴
- 데이터베이스의 UserProfile 테이블의 객체가 User 테이블의 객체와 반드시 한 번만, 일대일로 매칭
- 또한 여기서 UserProfile의 객체 userprofile1이 User의 객체 user1과 매칭되어 있다면, userprofile1.user 을 통해 user1에 접근할 수 있을 뿐만 아니라, 반대로 user1.userprofile을 통해 profile1을 데려올 수 있게 됨
- User 모델에 UserProfile을 다시 OneToOneField로 추가하지 않아도, 이미 UserProfile 모델에 작성한 OneToOneField만으로도 자동으로 역방향의 접근이 가능한 것
- on_delete=models.CASCADE : UserProfile 객체와 연결되어있는 User 객체가 삭제되는 경우, 그 UserProfile 객체도 같이 삭제되어야 함
$ python manage.py makemigrations
$ python manage.py migrate
model을 만들면 DB의 페이지 테이블 수정해야하므로 migration 필요합니다
Post 모델과 UserProfile 모델의 관계를 생각해보자.
One(UserProfile) to Many(Post) 관계이다. 한 User가 여러 개의 Post를 생성할 수 있음
=> Post 모델에서 UserProfile 모델의 foreign key를 관리해야 한다
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=256)
content = models.TextField()
created_at = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
def __str__(self):
return self.title
post/models.py 에다가 author 라는 foreign key를 추가해준다
- author에는 User 객체의 primary key인 id 정보가 담기겠죠
- null = True로 세팅함으로써 해당 column NULL 값 가질 수 있게 해줌
cf) on_delete 옵션 종류
$ python manage.py makemigrations
$ python manage.py migrate
model을 수정했으므로 다시 migration 해줍니다
끗!
'web > django' 카테고리의 다른 글
Django serializer 활용하기 - advanced (0) | 2024.05.14 |
---|---|
Django 모델 생성하고 Many-To-Many 관계 형성하기 (0) | 2024.05.14 |
데이터베이스 핵심 개념들 (0) | 2024.05.13 |
Django SWAGGER 이용해 API 명세 작성하기 (0) | 2024.05.08 |
Django serializer 활용하기 (0) | 2024.05.08 |