0

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

模型.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,它们似乎没有链接?

提前喝彩。

4

0 回答 0