Terry Very Good

[Django manage.py] 다른 모델을 참조하는 ForeignKey의 4가지 종류 본문

프로그래밍/(WEB) DB관리

[Django manage.py] 다른 모델을 참조하는 ForeignKey의 4가지 종류

테리베리 2020. 12. 20. 11:25
728x90
반응형
python&django

python & django

from django.db import models
 
# Create your models here.
class Category(models.Model):
    category_name = models.CharField(max_length = 100)
 
class Restaurant(models.Model):
        category = models.ForeignKey(Category, on_delete=models.SET_DEFAULT, default=3)
        restaurant_name = models.CharField(max_length = 100)
        restaurant_link = models.CharField(max_length = 500)
        restaurant_content = models.TextField()
        restaurant_keyword = models.CharField(max_length = 50)
cs

Category모델이 생성되어있는 형태에서 Restaurant 모델을 생성했다.
여기서 Restaurant.category는 Category table에 존재하는 Data만 값으로 받는다는 것이다.
on_delete(참조하려는 객체가 사라졌을 때)에는 4가지 형태가 있는데, 알아보도록 하겠다.

1. CASCADE: 참조되는 요소가 삭제되면, 이를 참조하는 요소도 같이 삭제.

2. PROTECT: 참조되는 요소를 삭제하려할 때, 해당 요소를 참조하는 요소가 하나라도 존재하면 ProetecedError 발생.

3. SET_NULL: 참조되는 요소가 삭제되 떄, 이를 참조하는 요소에서 참조값은 NULL로 설정.
    - 이를 사용하려면 "null=True"(해당 값을 null로 가질 수 있다)라는 옵션 설정 필요

4. SET_DEFAULT: 참조되는요ㅗ가 삭제될 때 이를 참조하는 요소에 대해서 DEFAULT값(미리 설정해둔 참조값)으로 설정.
     - category = models.ForeignKey(Category, on_delete=models.SET_DEFAULT, default=3) 라면,
      restaurant요소가 참조하는 category가 삭제딜 때 자동으로 id값이 3인 category를 참조하도록 한다.

728x90
반응형