본격적인 DRF를 학습하기에 앞서서, models에 대한 정리를 한 번 짚고 넘어가려고 한다.
django에서 models.py가 하는 역할은 무엇인가?
django 프로젝트 내에서 DB에 테이블을 추가하고 관리할 때 사용되는 파일.
테이블에 들어가는 필드와 그 필드의 속성값 등을 설정하는 역할을 하고있다.
models.py에 명시해둔 데이터들은 python manage.py migrations / miarate 를 통하여, DB에 반영할 수 있다
그렇다면, models.py에서 사용하는 다양한 필드들을 알아보자
# models.py
from django.db import models
class User(models.Model):
username = models.CharField("사용자 계정", max_length=20, unique=True)
email = models.EmailField("이메일 주소", max_length=100, unique=True)
password = models.CharField("비밀번호", max_length=20)
fullname = models.CharField("이름", max_length=20)
join_date = models.DateTimeField("가입일", auto_now_add=True)
class UserProfile(models.Model):
user = models.OneToOneField(to=User, verbose_name="사용자", on_delete=models.CASCADE)
hobby = models.ManyToManyField(to="Hobby", verbose_name="취미")
introduction = models.TextField("소개")
birthday = models.DateField("생일")
age = models.IntegerField("나이")
class Hobby(models.Model):
name = models.CharField("취미", max_length=50)
우선 django.db에서 models를 상속받아서 사용을 한다.
models 뒤에 붙어오는 CharField, EmailField 등은 어떠한 필드를 사용할 것인지를 명시하는 것 들이다.
여기서 중요하게 보아야 하는 얘들은 OneToOneField, ManyToManyField 이다
OneToOneField은 FK라고 볼 수도 있다
verbose_name은 그 필드를 어떻게 내가 시각화 할 것인가의 이름을 적어주는 것이다.
OneToOneField, FK 뒤에 붙어오는 on_delete는 어떻게 사용할까?
- CASCADE : FK로 참조하는 레코드가 삭제 될 경우 해당 레코드를 삭제한다.
- SET_NULL : FK 필드의 값을 Null로 변경해준다. null=True가 정의되어 있어야 사용 가능하다.
- PROTECT : 해당 레코드가 삭제되지 않도록 보호해준다.
- SET_DEFAULT : FK 필드의 값을 default로 변경해준다. default=””가 정의되어 있어야 사용 가능하다.
- SET() : FK 필드의 값을 SET에 설정된 함수를 통해 원하는 값으로 변경할 수 있다.
- DO_NOTHING : 아무런 동작을 하지 않는다. 참조 관계의 무결성이 손상될 수 있기 때문에 권장하지 않는다.
참조하는 FK와의 관계를 보고 설정을 하여준다.
예를들어, 유저라는 테이블에서 취미라는 FK를 사용한다고 가정을 하자.
여기서 유저가 가지고 있는 취미중 하나가 삭제가 되었다.
그렇다면 취미가 삭제가 되었기에, 그 취미를 가진 유저또한 삭제가 되어야 할까?
아니다. 유저를 삭제하는 것이 아니라, 유저의 취미란을 null로 가져야한다.
그럴 떄 CASCADE 를 사용하지 않고 SET_NULL 을 사용한다!!(유동적으로 고르기)
모델링 한 테이블들을 admin에서 추가,확인,수정을 해가며 관리하기
from django.contrib import admin
from user.models import User, UserProfile, Hobby
admin.site.register(User)
admin.site.register(UserProfile)
admin.site.register(Hobby)
admin.py에서 명시를 해 주어야, admin 페이지에서 모델의 속성값들을 추가하거나 관리가 가능하다