如何使用多重继承强制Django删除对象

How to force Django to delete objects using multiple inheritance

我有一个对象模型如下:

class Corporation(models.Model):
    corp_id = models.AutoField(primary_key=True)
    original_name = models.CharField(max_length=1000, blank=True, null=True)
    address = models.ManyToManyField(Address, related_name='corp_address')

class Person(models.Model):
    person_id = models.AutoField(primary_key=True)
    person_address = models.ManyToManyField(Address, related_name='person_address')

class Address(models.Model):
    address1 = models.CharField(max_length=500, blank=True, null=True)
    address2 = models.CharField(max_length=500, blank=True, null=True)
    city = models.CharField(max_length=100, blank=True, null=True)
    state = models.CharField(max_length=100, blank=True, null=True)
    zipcode = models.CharField(max_length=20, blank=True, null=True)
    country = models.CharField(max_length=100, blank=True, null=True)

class Committee(Corporation):
    name = models.CharField(blank=True, max_length=200, null=True)
    industry = models.CharField(blank=True, max_length=100, null=True)

创建 Committee 对象时,我创建了一个 Corporation 和一个 Address 对象。一个地址对象可能有多个公司指向它。

但是,当我执行 Committee.objects.delete() 时,Django 删除了 Committee 对象,但没有删除相关的 Corporation 或 Address 对象。

当我删除 Committee 对象时,如果另一个对象没有指向它,我想删除关联的 Address 对象。如果另一个对象未​​指向它,我还想删除关联的 Corporation 对象。

我如何执行此条件级联删除?

查看 on_delete 在 Django 中设置级联,这也会删除关联的记录。

在您的模型中,请以这种方式添加 on_delete = models.CASCADE:

 class Car(models.Model):
     manufacturer = models.ForeignKey(
         'Manufacturer', on_delete=models.CASCADE)

这是一个很好的post,它解释了 models.CASCADE 删除和 Django 上的 ManyToMany 关系。