Foreign Key & on_delete

jinatra·2021년 9월 14일
0

Django

목록 보기
8/9
post-thumbnail

Foreign Key & on_delete

on_delete 옵션이란?

Django에서 모델링을 할 때, ForeignKeyField가 바라보는 데이터가 삭제 됐을 때 해당 요소를 처리하는 방식을 지정하는 방식
(참조 된 객체가 삭제 될 때 채택되어야하는 동작을 구성하는 데 사용)


on_delete 옵션의 종류

CASCADE

참조된 객체가 삭제되면, ForeignKeyField를 포함하는 모델 인스턴스(row)도 같이 삭제

product_id가 참조하는 객체인 product가 삭제되면 product_images도 삭제된다.


PROTECT

해당 요소가 같이 삭제되지 않도록 ProtectedError를 발생

bank_id가 참조하는 객체인 bank를 삭제하려고 할 때 ProtectedError 발생


RESTRICT

참조하는 개체와 참조 된 개체가 ‘CASCADE’관계에서 다른 공통 개체를 참조하는 경우 참조 된 개체의 삭제 허용
참조 된 객체의 삭제를 방지하고 RestrictedError 발생

PROTECT와 유사한듯 보이나, PROTECT와 달리 참조 된 객체가 다른 객체를 참조하고있는 것은 CASCADE관계이고 또한 삭제되는 경우 삭제가 허용된다.


SET_NULL

ForeignKeyField 값을 NULL로 변경. null=True일 때만 사용 가능

main_category_id가 참조하는 객체인 main category가 삭제되면, ForeignKeyField인 main_category_id값이 NULL로 바뀐다.

(서브 카테고리의 3번 객체인 '축구'가 메인 카테고리의 1번 객체인 '스포츠'를 참조하고 있다고 할 때, '스포츠'가 삭제되면 축구 객체의 main_category_id1에서 NULL로 바뀐다.)


SET_DEFAULT

ForeignKeyField 값을 default 값으로 변경. default 값이 있을 때만 사용 가능


SET()

ForeignKeyField 값을 SET에 설정된 함수 등에 의해 설정


DO_NOTHING

말그대로 아무 조치도 취해지지 않게 된다.





참고

profile
으악

0개의 댓글