Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Django:使用pre_delete对级联进行反向操作_Django_Django Models_Cascading Deletes - Fatal编程技术网

Django:使用pre_delete对级联进行反向操作

Django:使用pre_delete对级联进行反向操作,django,django-models,cascading-deletes,Django,Django Models,Cascading Deletes,我正在使用Django编写一个字典应用程序,其中Expressions具有Definitions。当一个表达式被删除时,它的所有定义也将被删除(通过在外键字段中的on_delete=CASCADE实现) 我的问题是,当删除表达式的最后一个定义时,表达式将保留在我的数据库中,而不包含定义s。我希望当您删除表达式的最后一个定义时,表达式也会被删除 我看到Django中的pre_delete信号可能是解决方案的一部分,但无法成功实现。现在我得到一个递归错误: 调用Python对象时超出了最大递归深度

我正在使用Django编写一个字典应用程序,其中
Expression
s具有
Definition
s。当一个
表达式
被删除时,它的所有
定义也将被删除(通过在外键字段中的on_delete=CASCADE实现)

我的问题是,当删除
表达式
的最后一个
定义
时,
表达式
将保留在我的数据库中,而不包含
定义
s。我希望当您删除
表达式的最后一个
定义
时,
表达式
也会被删除

我看到Django中的
pre_delete
信号可能是解决方案的一部分,但无法成功实现。现在我得到一个递归错误:

调用Python对象时超出了最大递归深度

这是我的密码:

class Expression(models.Model):
    expression = models.CharField()

class Definition(models.Model):
    definition = models.CharField()
    expression = models.ForeignKey(Expression, on_delete=models.CASCADE, related_name="expression_definitions")

    def delete_parent(sender, **kwargs):
        expression = kwargs["instance"].expression
        definitions = expression.expression_definitions.all()
        if definitions.count() == 1:
            expression.delete()

    pre_delete.connect(delete_parent, sender="dictionary.Definition")