<참조: https://lee-seul.github.io/django/backend/2018/01/28/django-model-on-delete.html>

장고 모델 ForeinkeyField의 on_delete 옵션 종류

 

ForeignKeyField는 참조무결성 위해 ForeignKeyField 대상이 삭제될 때 처리할 옵션을 줄 수 있다.

 

1. CASCADE

ForeignKeyField가 바라보는 값이 삭제될 때 ForeignKeyField를 포함하는 모델 인스턴스(row)도 삭제된다.

 

from django.db import models

 

class TestModel(models.Model):

  pass

 

class FKModel(models.Model):

  test = models.ForeignKeyField(TestModel, on_delete=models.CASCADE)

 

2. PROTECT

ForeignKeyField가 바라보는 값이 삭제될 때 삭제되지 않도록 ProtectedError 발생시킨다.

 

from django.db import models

 

class TestModel(models.Model):

  pass

 

class FKModel(models.Model):

  test = models.ForeignKeyField(TestModel, on_delete=models.PROTECT)

 

3. SET_NULL

ForeignKeyField가 바라보는 값이 삭제될 때 ForeignKeyField 값을 null로 바꾼다(null=True일 때만 가능).

 

from django.db import models

 

class TestModel(models.Model):

  pass

 

class FKModel(models.Model):

  test = models.ForeignKeyField(TestModel, on_delete=models.SET_NULL, null=True)

 

4. SET_DEFAULT

ForeignKeyField가 바라보는 값이 삭제되면 ForeignKeyField 값을 default로 바꾼다(default 값 있을 때)

 

from django.db import models

 

class TestModel(models.Model):

  pass

 

class FKModel(models.Model):

  test = models.ForeignKeyField(TestModel, on_delete=models.SET_DEFAULT, default=1)

 

5. SET( )

ForeignKeyField가 바라보는 값이 삭제될 때 ForeignKeyField값을 SET에 설정된 함수 등에 의해 설정된다.

 

from django.db import models

 

class TestModel(models.Model):

  title = models.CharField(max_length=100)

 

def set_FK_Model_test():

  return TestModel.objects.get(id=1)

 

class FKModel(models.Model):

  test = models.ForeignKeyField(TestModel, on_delete=models.SET(set_FK_Model_test))

 

6. DO_NOTHING

ForeignKeyField가 바라보는 값이 삭제될 때 아무 행동을 취하지 않는다. 참조무결성을 해칠 위험이 있다.

from django.db import models

 

class TestModel(models.Model):

  pass

 

class FKModel(models.Model):

  test = models.ForeignKeyField(TestModel, on_delete=modelsDO_NOTHING)

반응형

'Django' 카테고리의 다른 글

장고 관련 온라인 책 링크  (0) 2021.11.05
장고 ORM Cookbook  (0) 2021.11.05
장고, AJAX GET, POST 요청/응답 예제 (시간 출력)  (0) 2021.10.31
장고 channels 채팅 서버 어떻게 만들었나?  (0) 2021.10.29
점프 투 장고  (0) 2021.10.07

+ Recent posts