Python Django GenericForeignKey在不应删除时被删除';T

Python Django GenericForeignKey在不应删除时被删除';T,python,django,generic-foreign-key,Python,Django,Generic Foreign Key,我遇到了一个问题,如果我删除一个对象,另一个对象似乎被错误地删除了 型号.py 类文档(models.model): file=models.FileField(上传到=文档路径,null=True,最大长度=256) ri_ct=models.ForeignKey( ContentType,null=True,editable=False,相关的\u name='documents\u related\u item',on\u delete=models.PROTECT ) ri_id=mod

我遇到了一个问题,如果我删除一个对象,另一个对象似乎被错误地删除了

型号.py

类文档(models.model):
file=models.FileField(上传到=文档路径,null=True,最大长度=256)
ri_ct=models.ForeignKey(
ContentType,null=True,editable=False,相关的\u name='documents\u related\u item',on\u delete=models.PROTECT
)
ri_id=models.PositiveIntegerField(null=True,editable=False,db_index=True)
相关项=通用外键('ri\U ct'、'ri\U id')
类别发票(型号.型号):
文档=一般关系(
文档,相关的\u查询\u名称='发票',内容\u类型\u字段='ri\u ct',对象\u id\u字段='ri\u id'
)
类平衡更新(models.model):
相关的\u项\u ct=型号。外键(
内容类型,
将选项限制为=Q(应用程序标签='main',型号=('proforminvoice','invoice'),
相关的账户名称=“余额更新”,
空=真,
在_delete=models.PROTECT上,
)
相关项目id=models.PositiveIntegerField(null=True,blank=True,db\u index=True)
相关项=通用外键(ct\u字段='related\u item\u ct',fk\u字段='related\u item\u id')
现在,如果我这样做了

Invoice.objects.filter(query.delete())
我得到一个余额更新,它与发票有关,也被删除了

经过大量调试后,我发现在删除发票时,文档正在被删除()

如果我们看一下,我们有一个递归函数,它收集要删除的对象

如果插入打印,当模型为Document时,sub_objs包含BalanceUpdate对象。这怎么可能呢?文档obj肯定应该有包含BalanceUpdate的sub_obj,它们似乎没有链接


提前干杯。

这可能是文档中指定的
GenericForeignKey
on\u delete=
触发器与ForeignKey不同,GenericForeignKey不接受on_delete参数来自定义此行为;如果需要,您可以通过不使用GenericRelation来避免级联删除,并且可以通过pre_delete信号提供替代行为。”。对,因此删除发票应删除文档(因为定义了GenericRelation),但不应删除余额更新。