Python Django中的奇怪删除
我有一个网络游戏,其中一个联盟可以有多个成员。这由每个成员类上的外键字段表示(因为成员只能是一个联盟的一部分) 我收到了一些奇怪的世界和联盟被删除的例子。我把范围缩小到我确信世界被删除只是因为联盟被删除了,所以我删除了级联删除。然而,我仍然无法理解为什么联盟会被删除 我重写了自定义删除方法,如下所示:Python Django中的奇怪删除,python,django,django-models,Python,Django,Django Models,我有一个网络游戏,其中一个联盟可以有多个成员。这由每个成员类上的外键字段表示(因为成员只能是一个联盟的一部分) 我收到了一些奇怪的世界和联盟被删除的例子。我把范围缩小到我确信世界被删除只是因为联盟被删除了,所以我删除了级联删除。然而,我仍然无法理解为什么联盟会被删除 我重写了自定义删除方法,如下所示: class Alliance(models.Model): ... def delete(self, *args, **kwargs): mail.send_mai
class Alliance(models.Model):
...
def delete(self, *args, **kwargs):
mail.send_mail('Alliance Deletion', '%s has been deleted.' \
% self.alliance_name, 'from@email.com', ['to@email.com'])
super(Alliance, self).delete(*args, **kwargs)
然而,至少有一个联盟已经被删除,我没有收到一封电子邮件给我。我想这是因为我必须从QuerySet调用delete(),但我已经仔细研究了我的代码,有一次我在任何alliance实例上调用delete(),而不是在QuerySet上
有没有办法追踪导致这种情况的原因,或者找出是什么函数执行了对象的删除?找到了答案。我在M2M关系上调用
delete()
,而我本应该调用remove()
默认情况下,Django外键删除具有级联效应,它会删除包含该外键的对象。它由on_delete方法处理。我想知道你是否推翻了错误的方法?我从来没有亲自尝试过,所以希望有人有更多的信息。我在这里读到了关于你的报道。”所以我删除了级联删除“。。。