3

我用来在我的测试model_mommy中创建实例MPTTModel,但它似乎破坏了由 mptt 管理的树:

>>> parent = mommy.make(Category)
>>> child = mommy.make(Category, parent=parent)
>>> parent.get_descendants()
[]

不使用 model_mommy 也可以正常工作:

>>> parent = Category(name=u'Parent')
>>> parent.save()
>>> child = Category(name=u'Child', parent=parent)
>>> child.save()
>>> parent.get_descendants()
[<Category: Child>]

我怀疑问题在于 model_mommy 为 、 和 提供了随机值tree_id,它们lft是必填字段,但应该由 MPTT 处理。rghtlevel

有没有办法告诉模特妈妈根本不要填写这些字段?还是这些字段的默认值不会破坏 MPTT 的保存算法?

4

1 回答 1

3

事实证明,如果lftrght具有真值,MPTTModel.save则认为节点已经设置。因此,将这些字段设置None为足以修复树更新。

我创建了一个在测试中随处使用的妈妈食谱,因此我不必记住设置这些字段:

category_recipe = Recipe(Category, lft=None, rght=None)

然后在测试用例中:category_recipe.make()而不是mommy.make(Category).

于 2015-08-28T13:43:26.230 回答