model_mommy 破坏了 django-mptt
model_mommy breaks django-mptt
我在测试中使用 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
、rght
和 level
提供了随机值,这些是必填字段,但应该由 MPTT 处理。
有没有办法告诉模特妈妈根本不要填写这些字段?或者这些字段是否有不会破坏 MPTT 保存算法的默认值?
事实证明,如果 lft
或 rght
具有真值,则 MPTTModel.save
认为节点已经设置。因此,将这些字段设置为 None
足以修复树更新。
我创建了一个我在测试中随处使用的妈妈食谱,所以我不必记住设置这些字段:
category_recipe = Recipe(Category, lft=None, rght=None)
然后在测试用例中:category_recipe.make()
而不是 mommy.make(Category)
。
我在测试中使用 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
、rght
和 level
提供了随机值,这些是必填字段,但应该由 MPTT 处理。
有没有办法告诉模特妈妈根本不要填写这些字段?或者这些字段是否有不会破坏 MPTT 保存算法的默认值?
事实证明,如果 lft
或 rght
具有真值,则 MPTTModel.save
认为节点已经设置。因此,将这些字段设置为 None
足以修复树更新。
我创建了一个我在测试中随处使用的妈妈食谱,所以我不必记住设置这些字段:
category_recipe = Recipe(Category, lft=None, rght=None)
然后在测试用例中:category_recipe.make()
而不是 mommy.make(Category)
。