Django MPTTMeta order_insertion_by中的错误导致节点报告不正确的后代?

2024-05-13 22:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Django应用程序有一个名为Treenode的模型,它通过子类化MPTTModel(版本0.6.1)来实现树。模型如下:

from mptt.models import MPTTModel, TreeForeignKey

class Treenode(MPTTModel):
    name = models.CharField(max_length=255)
    parent = TreeForeignKey('self', null=True, blank=True)

    class MPTTMeta:
        order_insertion_by = ['name']

    def __unicode__(self):
        return "%s (#%s)" % (self.name, self.pk)

现在看看当我开始创建此模型的实例时会发生什么:

^{pr2}$

你看到虫子了吗?x与{}是同一个实例——只是从数据库中检索到的。但是MPTT错误地报告了实例C是{}的后代。不是的!在

我做了大量的实验来隔离和识别这个问题。我发现,如果将实例a名称属性从“S”改为“A”,问题就消失了。我还发现,如果从模型中删除嵌套的MPTTMeta类,问题就消失了。这表明MPTTMeta的order-insertion-by-code有问题。有人能证实这一点或知道是否有解决办法吗?在

作为补充证据,我已经包含了Treenode数据库表的屏幕截图,当我有MPTTMeta(损坏)和删除MPTTMeta(工作)之后,为了比较的目的。在

With MPTTMeta (broken)Without MPTTMeta (working)


Tags: 实例name模型self数据库truebymodels