模型继承中的状态共享和删除

时间:2017-02-16 08:51:38

标签: django django-models django-1.6

我有一个Django 1.6模型结构,其中实例共享一个公共模型实例作为子类。

inheritance

在数据库术语中,A行有B行,C行有parent_link行。

.delete()上致电C'时,AC的行已删除,但B有一个孤儿记录。直接实例化A并调用delete会将删除级联到BC实例。我怎样才能以最简单的方式确保删除BC的实例将删除父级和兄弟级状态?

删除A的实例会导致删除B和C的链接实例。删除B会导致B和A删除。删除C会导致C和A删除。

如何删除任何A,B或C实例删除所有其他实例,而不管是否正在调用delete()实例?

作为旁注,所有实例似乎都被删除了,因此在.delete()处调用C'时,基本状态和B'似乎被删除,但实际上是{B'行。 1}}将保持不会出现在查询中,直到创建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()

1 个答案:

答案 0 :(得分:0)

您可以覆盖models delete() method或使用post_delete signal。注意:链接是当前版本的文档,但所有这些在1.6中都是一样的。