如何使用多重继承强制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 关系。
我有一个对象模型如下:
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 关系。