class A(models.Model):
name = models.CharField(max_length=128)
class B(modes.Model):
type_b = models.ForeignKey(A)
如何删除模型的父对象' A'当我删除模型' B'的相关子对象时。我通过Django admin批量删除选项
删除子对象答案 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)