본문 바로가기
웹개발/django

on_delete 에 관하여

by julysein 2020. 9. 13.
728x90

항상 dafault값으로 쓰다가 다른 것을 쓰려고 하니 헷갈렸다. 흔하게 쓰이는 것인데도 잘 모르고 있는 것 같아서 공부할겸 정리해보았다.

 

user 과 post의 관계를 1:n 이다.

user가 여러개의 post를 작성하므로 user가 1 post 가 n인 1:n 관계가 성립한다. 

 

class USER(models.Model):
	name = models.CharField(max_length=10)
    
class POST(models.Model):
	user = models.ForeignKey(USER, on_delete=models.CASCADE)
    context = models.TextField()

다음과 같이 작성할 수 있다.

이때 on_delete는 1:n의 관계에서 1이 사라지는 경우 n을 어떻게 처리할지에 대한 정의이다.

 

on_delete=models.CASCADE : n에 해당하는 다른 모델의 record도 전부 삭제 (default 값)

on_delete=models.PROTECT : 삭제를 방지

on_delete=models.SET_NULL : 참조하는 foreignkey값을 null로 변경한다. 이를 사용하기 위해서는 null=True 옵션을 추가해야 한다.

on_delete=models.SET_DEFAULT : 참조하는 foreignkey값을 dafault로 변경한다. 이를 사용하기 위해서는 default 값이 지정되어 있어야 한다. 

on_delete=models.SET(함수) : 함수라고 쓰여있는 부분에 함수를 넣어주어야 한다. 1에 해당되는 부분이 삭제될 시 함수가 실행된다. 

on_delete=models.DO_NOTHING : 아무것도 하지 않는다.

 

728x90