[Django] ForeignKeyField on_delete
ForeignKey는 relation이 작동하는 방식을 정의하는 arguments를 받습니다.
ForeignKey로 참조되는 객체가 삭제됐을때, 장고는 on_delete argument가 지시한 대로 SQL동작을 모방할 것입니다.
on_delete의 가능한 값들은 다음과 같습니다.
- CASCADE
장고는 참조 된 오브젝트가 삭제되면 ForeignKey를 가지고 있는 object들(해당 오브젝트를 참조하는 오브젝트들) 을 삭제합니다. -
- PROTECT
참조된 객체의 삭제를 차단하고 ProtectedError를 발생시킵니다. 삭제하려면 수동으로 참조하는 모든 객체를 삭제해야 합니다.
- RESTRICT
PROTECT와 유사한 동작입니다. RestrictedError를 발생시켜 참조된 개체의 삭제를 방지합니다.
- SET_NULL
ForeignKey를 null로 둡니다. 이 값은 필드에 null 이 입력 가능할때(null=True)에만 사용할 수 있습니다.
ex) 주석이 사용자를 참조할 때, 사용자가 삭제되더라도 사용자가 게시한 주석은 익명의 사용자가 게시한 것으로 남아있습니다.
- SET_DEFAULT
ForeignKey의 디폴트값을 설정합니다. 디폴트값은 반드시 설정돼야 합니다.
- SET()
ForeignKey의 값을 SET()함수에서 설정한 대로 설정합니다.
- DO_NOTHING
말그대로 어떠한 액션도 취하지 않습니다. 참조 무결성을 해칠 수 있어서 권장되지 않습니다.
실제로는 존재하지 않는 개체를 참조하는 문제가 발생할 수 있다는 뜻입니다.