我遇到了一个问题,如果我删除一个对象,另一个对象似乎被错误地删除了。
模型.py
class Document(models.model):
file = models.FileField(upload_to=document_path, null=True, max_length=256)
ri_ct = models.ForeignKey(
ContentType, null=True, editable=False, related_name='documents_related_item', on_delete=models.PROTECT
)
ri_id = models.PositiveIntegerField(null=True, editable=False, db_index=True)
related_item = GenericForeignKey('ri_ct', 'ri_id')
class Invoice(models.model):
documents = GenericRelation(
Document, related_query_name='invoices', content_type_field='ri_ct', object_id_field='ri_id'
)
class BalanceUpdate(models.model):
related_item_ct = models.ForeignKey(
ContentType,
limit_choices_to=Q(app_label='main', model__in=('proformainvoice', 'invoice')),
related_name='balance_updates',
null=True,
on_delete=models.PROTECT,
)
related_item_id = models.PositiveIntegerField(null=True, blank=True, db_index=True)
related_item = GenericForeignKey(ct_field='related_item_ct', fk_field='related_item_id')
现在,如果我这样做
Invoice.objects.filter(query).delete()
我收到了一个与 Invoice 相关的 BalanceUpdate,也被删除了。
经过大量调试后,我发现在删除 Invoice 时,文档正在被删除(由于定义的 GenericRelation 是正确的)。
如果我们查看Collector.collect,我们有一个递归函数,用于收集要删除的对象。
如果我在此处插入打印,当模型为 Document 时,sub_objs 包含 BalanceUpdate 对象。怎么会这样?Document obj 肯定应该有包含 BalanceUpdate 的 sub_objs,它们似乎没有链接?
提前喝彩。