2015-08-28 4 views
1

Я использую model_mommy создать экземпляры MPTTModel в моих тестах, но кажется, что он ломает дерево, управляемое mptt:model_mommy ломает Джанго-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?

ответ

2

Оказывается, если lft или rght имеют правдивое значение, MPTTModel.save считает, что узел уже настроен. Таким образом, установка этих полей на None достаточно, чтобы исправить обновление дерева.

Я создал рецепт Мамочки, который я использую везде в моих тестах, так что я не нужен помнить, чтобы установить эти поля:

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

, а затем в тестовых случаях: category_recipe.make() вместо mommy.make(Category).