인스턴스가 공통 모델 인스턴스를 서브 클래스로 공유하는 Django 1.6 모델 구조가 있습니다. 데이터베이스 관점에서모델 상속에서의 상태 공유 및 삭제
는 B
위한 A
행에 대한 행과 parent_link
ID의 사용에 대한 행 C
있다.
A
및 C
에 대한 C'
에 .delete()
행을 호출
B
에 대한 고아 기록이있다.
A
을 직접 인스턴스화하고 delete를 호출하면
B
및
C
인스턴스가 삭제됩니다. 가장 간단한 방법으로
B
또는
C
인스턴스를 삭제하면 부모와 형제 상태가 모두 삭제됩니다.
A의 인스턴스를 삭제하면 B와 C의 링크 된 인스턴스가 삭제됩니다. B를 삭제하면 B와 A가 삭제됩니다. C를 삭제하면 C와 A가 삭제됩니다.
A, B 또는 C 인스턴스를 삭제하면 delete() 인스턴스가 호출되는 것과 관계없이 다른 모든 인스턴스가 삭제 될 수 있습니다. 어떻게해야합니까? 지속 및 다른 기본 인스턴스가 될 때까지 쿼리에 나타나지 않습니다 보조 노트로
는 모든 인스턴스가 삭제 한 것으로 나타났습니다, 그래서C'
에서
.delete()
를 호출 할 때이 기본 상태와
B'
가 삭제되어 나타나지만
B'
에 대한 행을 가리키고
PK
이 정렬 된 위치에 생성됩니다. 이 경우
B'
가 다시 출연합니다.
다음은 클래스입니다 :
class A(models.Model):
# Fields here
class B(A):
a_ptr = models.OneToOneField(A, parent_link=True)
# More fields
class C(A):
a_ptr = models.OneToOneField(A, parent_link=True)
# More fields
# Code
shared_state = A()
shared_state.save()
sharer_b = B(a_ptr=shared_state.id)
charer_c = C(a_ptr=shared_state.id)
sharer_b.save()
sharer_c.save()
# Objective, this should delete all rows for the above?
sharer_c.delete()
2 인스턴스가 공통 인스턴스 (A와 B 인스턴스를 공유)를 공유하는 1.6의 문제는 C 삭제를 삭제하는 것이지만 B 행은 여전히 존재하지만 액세스가 불가능한 고아입니다. –