Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中的奇怪删除_Python_Django_Django Models - Fatal编程技术网

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方法处理。我想知道你是否推翻了错误的方法?我从来没有亲自尝试过,所以希望有人有更多的信息。我在这里读到了关于你的报道。”所以我删除了级联删除“。。。