2015-07-13 4 views
0

Я написал файл миграции данных для создания некоторых исходных данных для модели MPTT.Создание модели MPTT не удается при миграции данных

Но создание не удается,

def create_foo(apps, schema_editor): 
    db_alias = schema_editor.connection.alias 
    logger = logging.getLogger(__name__) 

    Foo = apps.get_model("app", "Foo") 

    for attr in ROLES: 
     try: 
      foo = Foo.objects.using(db_alias).get(name=attr[0]) 
    except Foo.DoesNotExist: 
     parent = Foo.objects.using(db_alias).get(name=attr[1]) if attr[1] else None 
     if parent: 
      foo = Foo.objects.create(name=attr[0], parent=parent) 
     else: 
      foo = Foo.objects.using(db_alias).create(name=attr[0]) 
     logger.info("Created foo - %s" % foo) 

Я получаю ниже ошибки при выполнении ниже линии, какие идеи?

foo = Foo.objects.using(db_alias).create(name=attr[0])

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler raise errorclass, errorvalue django.db.utils.IntegrityError: (1048, "Column 'lft' cannot be null")

+0

FWIW, тот же код работает прекрасно, когда вызывается отдельно. –

ответ

4

Вы должны вручную зарегистрировать модель с mptt:

from mptt import register 

def create_foo(apps, schema_editor): 
    db_alias = schema_editor.connection.alias 
    logger = logging.getLogger(__name__) 

    Foo = apps.get_model("app", "Foo") 
    register(Foo) 

    # ... rest of your code...