Django 참조키 on_delete

minch·2021년 8월 4일
0

Django

목록 보기
12/16
post-thumbnail

1. CASCADE

참조하는 값이 삭제될 때 ForeignKeyField를 포함하는 모델 인스턴스도 삭제된다.

class Product(models.Model):
	...
    sub_category = models.ForeignKeyField('SubCategory', on_delete=models.CASCADE)

2. PROTECT

참조하는 값이 삭제될 때 삭제가 되지않도록 ProtectedError를 발생시킨다.

class Product(models.Model):
	...
    sub_category = models.ForeignKeyField('SubCategory', on_delete=models.PROTECT)
    # 지워지는 걸 방지

3. SET_NULL

참조하는 값이 삭제될 때 ForeignKeyField값을 null로 바꾼다. (null=True일 때만 가능)

class Option(models.Model):
    product = models.ForeignKeyField('Product', on_delete=models.SET_NULL, null=True)

4. SET_DEFAULT

참조하는 값이 삭제될 때 ForeignKeyField값을 default 값으로 바꾼다. (default값이 있을 때만 가능)

class Option(models.Model):
    product = models.ForeignKeyField('Product', on_delete=models.SET_DEFAULT, default=1)

5. SET()

참조하는 값이 삭제될 때 ForeignKeyField값을 SET에 설정된 함수 등에 의해 설정된다.

def set_FK_Model_test():
    return TestModel.objects.get(id=1)

class TestMd(models.Model):
    test = models.ForeignKeyField(TestModel, on_delete=models.SET(set_FK_Model_test))

6. DO_NOTHING

참조하는 값이 삭제될 때 아무런 행동을 취하지 않는다. 하지만 없는 값을 참조하게 되는 문제가 생긴다

    any = models.ForeignKeyField(TestModel, on_delete=models.DO_NOTHING
    

0개의 댓글