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