在Django

时间:2017-10-09 14:13:11

标签: django django-models

class A(models.Model):
    name = models.CharField(max_length=128)

class B(modes.Model):
    type_b = models.ForeignKey(A)

如何删除模型的父对象' A'当我删除模型' B'的相关子对象时。我通过Django admin批量删除选项

删除子对象

3 个答案:

答案 0 :(得分:2)

您应该使用signals

@receiver(post_delete, sender=B)
def delete_a(sender, instance, **kwargs):
     # instance.type_b is the object which you want to delete

答案 1 :(得分:0)

最佳方法,只需添加[on_delete=models.CASCADE][1]

即可

class A(models.Model):
    name = models.CharField(max_length=128)

class B(modes.Model):
    type_b = models.ForeignKey(A,on_delete=models.CASCADE)

答案 2 :(得分:0)

您可以使用post_delete信号删除父级,如Davit Tovmasyan所建议。

但是由于父级A对象被删除的级联性质,它还将删除所有连接的B对象,这些对象将在B模型上发出post_delete信号。因此,在post_delete的第二次发出时,信号处理程序尝试删除导致'NoneType' object has no attribute 'delete'的已删除项。您可以使用异常处理程序或只使用if条件来处理此问题。

def delete_parent(sender, instance, **kwargs):
    if instance.type_b:
        instance.type_b.delete()

post_delete.connect(delete_parent, sender=B)