on_delete 옵션은 Django에서 모델을 구현할 때 데이터베이스 상에서 참조무결성을 유지하여 1ForeignKeyField가 바라보는 값이 삭제될 때 해당 요소를 처리하는 방법을 지정해 준다.
- CASCADE : ForeignKeyField를 포함하는 모델 인스턴스(row)도 같이 삭제한다.
12345from django.db import modelsclass TestModel(models.Model):passclass FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.CASCADE)cs - PROTECT : 해당 요소가 같이 삭제되지 않도록 ProtectedError를 발생시킨다.
12345from django.db import modelsclass TestModel(models.Model):passclass FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.PROTECT)cs - SET_NULL : ForeignKeyField 값을 NULL로 바꾼다. null=True일 때만 사용할 수 있다.
12345from django.db import modelsclass TestModel(models.Model):passclass FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.SET_NULL, null=True)cs - SET_DEFAULT : ForeignKeyField 값을 default 값으로 변경한다. default 값이 있을 때만 사용할 수 있다.
123456789from django.db import modelsclass TestModel(models.Model):passDEFAULT_TEST_MODEL_PK = 1class FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.SET_DEFAULT, default=DEFAULT_TEST_MODEL_PK)cs - SET() : ForeignKeyField 값을 SET에 설정된 함수 등에 의해 설정한다.
12345678910from django.db import modelsclass TestModel(models.Model):title = models.CharField(max_length=100)def set_FK_Model_test():return TestModel.objects.get(id=1)class FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.SET(set_FK_Model_test))cs - DO_NOTHING : 아무런 행동을 취하지 않는다. 참조 무결성을 해칠 위험이 있어서 잘 사용되지는 않는다.
12345from django.db import modelsclass TestModel(models.Model):passclass FKModel(models.Model):test = models.ForeignKeyField(TestModel, on_delete=models.DO_NOTHING)cs
- 관계 데이터베이스 관계 모델에서 2개의 관련 있던 관계 변수 간의 일관성 [본문으로]
'Back End' 카테고리의 다른 글
[Django] Django MTV 개발 방식 (0) | 2019.05.16 |
---|---|
[Django] Django로 만드는 투표 앱(1) - views.py 설계 (0) | 2019.05.08 |