2015-12-30 2 views
0

Условия: Django == 1.8.7 и django-mptt == 0.8.0.django-mptt повышает django.db.utils.IntegrityError: значение null в столбце «lft» нарушает непустое ограничение

Существует модель:

class Tree(mptt_models.MPTTModel): 
    name = models.CharField(max_length=120, unique=True) 
    slug = models.SlugField(max_length=256, unique=True) 
    parent = mptt_models.TreeForeignKey('self', null=True, blank=True, 
             related_name='children', db_index=True) 

    class MPTTMeta: 
     order_insertion_by = ['name'] 

я могу заполнить его интерфейс администратора и показать на сайте страниц.

я могу заполнить его с Джанго оболочкой:

Python 2.7.3 (default, Jun 22 2015, 19:43:34) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> from src.catalog.models import Tree 
>>> Tree.objects.create(name='1', slug='2') 
<Tree: 1> 
>>> Tree.objects.all() 
[<Tree: 1>] 

Я написал миграции, которая заполняет модель дерева, используя информацию из устаревших моделей:

def propagate_tree(app_registry, schema_editor): 
    Category = app_registry.get_model('catalog', 'Category') 
    Tree = app_registry.get_model('catalog', 'Tree') 

    for category in Category.objects.all(): 
     parent = Tree.objects.create(name=category.title, slug=category.slug) 

     for group in category.group_set.all(): 
      Tree.objects.create(parent=parent, name=group.title, slug=group.slug) 

Я получил следующее сообщение об ошибке:

django.db.utils.IntegrityError: null value in column "lft" violates not-null constraint 

при выполнении линии:

parent = Tree.objects.create(name=category.title, slug=category.slug) 

До сих пор не могу понять причину этой ошибки :(

ответ

0

Я только что по тому же вопросу, и причина является импорт модели с использованием app_registry. Заменить это в миграции:

Tree = app_registry.get_model('catalog', 'Tree') 

с нормальным импортом, как вы делаете в оболочке.

from src.catalog.models import Tree 

И он должен работать как шарм.

Однако я не знаю, почему первый из них не работает, поскольку, насколько мне известно, это предпочтительный способ импорта моделей в файлы миграции.

Смежные вопросы