从’django-mptt`使用`get_ancestors`函数时出现错误的结果
发布时间:2020-12-16 21:57:43 所属栏目:Python 来源:网络整理
导读:我正在开发一个使用django-mptt的项目,但是当我使用get_ancestors函数时,我得到了奇怪的结果.这是一个例子. 我有一个创建了一个简单的模型,继承自MPTTModel: class Classifier(MPTTModel): title = models.CharField(max_length=255) parent = TreeForeignK
我正在开发一个使用django-mptt的项目,但是当我使用get_ancestors函数时,我得到了奇怪的结果.这是一个例子.
以下是适用于此模型的功能:
我希望在输出上看到下一个值:
但是我看到了:
因此,当您看到此函数为bbb节点打印正确的祖先列表,但aaa节点的错误祖先.你能解释一下为什么会这样吗?这是django-mptt中的错误还是我的代码不正确? 提前致谢. 最佳答案
将节点插入树中时,会导致整个树发生更改.因此,当您插入b节点时,您的a和根节点会在数据库中更改,但您的变量不会更新并保持包含旧的左/右值,这些值用于构建正确的树结构.
在你的情况下,当行aa.insert_at(a,save = True)在proccess中时,你的变量包含一个lft = 2和rght = 3的旧实例,而在数据库中,一个节点包含lft = 4和rght = 5. 在插入新项目之前,您需要获取父项的新实例.最简单的方法是运行refresh_from_db:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |