2015-08-28 32 views
1

我使用model_mommy建立在我的測試的MPTTModel的情況下,但看起來它打破了由MPTT管理樹:model_mommy打破Django的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_idlftrghtlevel隨機值,這是必填字段,但應由MPTT處理。

有沒有辦法告訴模型媽媽不要填寫這些字段?或者是否有這些字段的默認值不會破壞MPTT的保存算法?原因如下:

回答

2

原來,如果lftrght有一個真值,MPTTModel.save認爲該節點已經建立。因此,將這些字段設置爲None足以修復樹更新。

我創造,我在我的測試中使用隨處可見媽媽的食譜,所以我不記得要設置這些字段:

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

然後在測試用例:category_recipe.make()代替mommy.make(Category)