Django继承的模型没有完全删除

时间:2016-12-22 06:45:32

标签: python django inheritance

我在django中有一个模型继承,如下所示:

class A(models.Model):
 name = models.CharField (max_length = 255, unique = True)

class B(A):
 desc = models.CharField (max_length = 255)

当在B上执行删除时,它会留下"垃圾"落后于A。

obj = B.objects.create(name = "My", desc = "left overs")
obj.delete()

现在我无法将模型改为t 1to1 FK而不是继承,因为它是一个已经运行的软件。 有没有什么好方法可以正确删除?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

不幸的是,在这种情况下,你拥有的是两张表,彼此没有关系。

继承并不意味着FK关系;它只是意味着,非常字面意思:

  

从继承的表中复制所有列定义,所以我没有   必须再写一次

继承仍会创建原始表,除非您将abstract = True传递给父模型。

要永久解决此问题,您需要执行数据库迁移,然后[a]删除表 A ,并将abstract = True添加到其定义或[ b]创建一个合适的外键关系。

目前,你可以做的是找到所有 A B 并删除那些 for obj in A.objects.all(): if not obj.b_set.all(): obj.delete() 。不幸的是,没有诀窍,你必须以非常低效的方式做到这一点:

orderDetailsArray