foreign = models.ForeignKey(받아올 모델 명, on_delete=models.CASCADE)
one_to_one = models.OneToOneField(받아올 모델 명, on_delete=models.CASCADE)
many_to_many = models.OneToOneField(받아올 모델 명)
on_delete
는 ForeignKey
가 바라보는 값(받아오는 모델)이 삭제 될 때 어떻게 처리할 지 정해주는 역할이다.
(장고가 모델을 구성할 때, 참조 무결성을 유지하기 때문에!!)
👉 참조 무결성 : 관련 된 테이블 간의 관계를 유효하게 하는 규칙. 사용자가 함부로 or 실수로 데이터를 삭제하거나 수정하지 못하게 막아줌!
on_delete
(삭제 할 경우)
CASCADE
: 관련 된 두 테이블 데이터를 모두 삭제한다.PROTECT
: 삭제 될 경우ForeignKey
가ProctectedError
를 발생시킨다.SET_NULL
: 삭제 될 경우ForeignKey
가 바라보는 값이NULL
이 된다. 뒤에null=True
를 붙여줘야 함!SET_DEFAULT
: 삭제 될 경우ForeignKey
가 바라보는 값이default
가 된다.
해당 블로그에서 위 내용들을 아주 간단하게 설명해줬는데. 웃기다
👇
CASCADE : "안녕 세상에, 나는 article_B 없이는 살 수 없다"고 자살한다.
PROTECT : "아니오! 제발! 하지마! 난 너 없이는 살 수 없어!"
SET_NULL : "좋아, 내가 너의 사람이 아니라면 난 아무도 아니야"
SET_DEFAULT, SET() : "괜찮아, 여분의 애인이있어, 지금부터 article_C를 참조 할 것이다"
DO_NOTHING : "나는 현실에 직면 할 수 없다, 그것이 나에게 남아있는 유일한 것이더라도 당신의 이름을 계속 부르겠다!"
👆