Django model on_delete 옵션

Django model 만들때 Foreign key (ForeignKeyField) 로 등록된 필드를 넣을 때 마다 on_delete 옵션을 준다. 이것의 명확한 의미를 알아보자.

 

구글링을 통해 적합한 내용을 찾아보자.

 

https://tothefullest08.github.io/django/2019/06/10/Django19_relations1_comment_CRUD1/

 

user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

 

  • models.CASCADE : 부모가 삭제 되면, 자기 자신도 삭제
  • models.PROTECT : 자식이 존재하면, 부모 삭제 불가능 ( ProtectedError 발생시킴), 다른 필드에 CASCADE 되어 있어서 지워져야 하는 상황이 되어도 기필고 안 지워지도록 막아낸다.
  • (추가된 옵션) models.RESTRICT : 자식이 존재하면, 부모 삭제 불가능 ( ProtectedError 발생시킴 ) 하지만 다른 옆에 필드에 CASCADE 되어 있어서 지워져야 하는 상황이면 양보한다. 즉 지워진다.
  • SET_NULL : 부모가 삭제되면, 자식의 부모 정보를 NULL로 변경 <- ??

틀려도 할 수 없다. 내가 이해한대로 일단 진행 고고

 

왠만하면 다 models.PROTECT 로 진행한다. 데이터를 보관해 둬야 하니깐, 저절로 지워지는 건 인정못해

진땀난다.

션한 폭포수를 바라보며. cascade

Julia Volk 님의 사진, 출처: Pexels