2016-06-20 4 views
4

기본 데이터베이스에 A -> B -> C -> D와 같은 장고 모델이 있다고 가정합니다.소프트 삭제 django 데이터베이스 객체

C가 D에 외부 키 오브젝트 (A)의 삭제에 A.

에서 C 및 C에 유사하게 B이며, 장고의 기본 동작은 모든 객체들이 직접 또는 간접적 것 관련된이다 자동 삭제 (캐스케이드 삭제시). 그러면 B, C, D가 자동으로 삭제됩니다.

A 개체를 삭제할 때 'del'이라는 다른 데이터베이스로 이동하게되는 방식으로 삭제를 구현하려고합니다. B, C, D의 다른 모든 관련 개체 또한 움직이는.

한 번에 쉽게 구현할 수 있습니까?

+0

다른 데이터베이스 또는 테이블로 이동 하시겠습니까? – e4c5

+0

다른 데이터베이스 –

+0

RDBMS는 무엇입니까? – e4c5

답변

0

모델 Adelete 메소드를 무시하고 삭제하기 전에 관계를 확인하십시오. 비어 있지 않으면 개체를 다른 테이블/DB로 이동합니다.

4

나는 다음과 같이 별도의 데이터베이스에 물건을 이동하는 대신 내 데이터베이스의 각 모델에 삭제 플래그를 사용하여이 일을 구현 다음과 같이

deleted = models.BooleanField(default=False) 

을 그리고 각 모델에 대한 soft_del 기능을 정의 :

def soft_del(self): 
     self.deleted = True    
     self.save() 

따라서 삭제 된 모델은 삭제 된 플래그가 True로 설정된 동일한 데이터베이스에 존재합니다.

class B(models.Model) 
    a = models.ForeignKey(A,related_name='related_Bs')) 

을 다음 자식 때의 soft_del 전화를 다음과 같이 또한

온 DELETE CASCADE 효과를 생성하기가 I는 각 모델 등 soft_del 기능을 추가하고, 모델의 각 외부 키에 related_name 준 부모의 soft_del 안에 다음과 같이 입력하십시오 :

def soft_del_A(self): 
    self.deleted = True 
    for b in A.related_Bs.all(): 
     b.soft_del_B() 

    self.save() 
0

소프트 삭제시 django의 기본 삭제 동작과 일치하는 라이브러리가 있습니다. (즉, 캐스케이드 사용, 모델 사양의 기타 옵션 등을 수행하지 않음).

https://github.com/upgrad/django-deletes

PS : 라이브러리는 베타 모드,하지만 활성 개발에 아직도있다.