Исключение при попытке установить Django-Treebeard на основании инструкций - PullRequest
1 голос
/ 07 февраля 2010

Я получаю неописательное (или, по крайней мере, не знаю, как интерпретировать в этом контексте) сообщение об ошибке при суб-посылке с узла Django-Treebeard и не уверен, как отлаживать.Я использую инструкции по установке: http://code.tabo.pe/django-treebeard/src/tip/tbexample/ (см. В конце публикации).

Я создаю подкласс MP_Node, и syncdb работает.Однако загрузка кода models.py в оболочку приводит к ошибке «индекс списка вне диапазона» - см. Код и трассировку ниже.

Спасибо за вашу помощь.

Python 2.6.4,Django 1.1, Treebeard 1.1:

try:
    from django.db import models, transaction
    from django.db.models import AutoField
    import django.dispatch
    from django.contrib.treebeard.mp_tree import MP_Node
except ImportError, exc:
    print "django error in %s: %s" % (__file__, exc)

class DelibNode(MP_Node): pass

Traceback (most recent call last):
     File "<console>", line 1, in <module>
     File "C:\Program Files\Python26\lib\site-packages\django\db\models\base.py", line 52, in __new__
     kwargs = {"app_label": model_module.__name__.split('.')[-2]}
     IndexError: list index out of range

Установленные приложения в Settings.py:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.s  ites',
'django.contrib.admin',
'django.contrib.treebeard',
'medCE.delib'
)

Инструкции:
1. Запустите easy_install django-treebeard, чтобы установить
последнюю версию Treebeardверсия от PyPi
1.1.Если вам не нравится easy_install, загрузите релиз со страницы загрузки
treebeard или получите версию для разработки
из ртутного хранилища treebeard и запустите
python setup.py install
2. Добавьте «treebeard» враздел INSTALLED_APPS в вашем файле настроек
django.
3. Создайте новую модель, которая наследуется от одной из
моделей абстрактного дерева django-treebeard: mp_tree.MP_Node (материализованный путь),
ns_tree.NS_Node (вложенные множества) или al_tree.AL_Node
(список смежности).
4. Выполнить python manage.py syncdb

Ответы [ 2 ]

3 голосов
/ 11 июля 2012

У меня была такая же ошибка сегодня. Чтобы исправить это, сначала перейдите в файл models.py и в каждом из классов вам нужно добавить другой класс:

class Meta:
    app_label = 'app_name' # medCE.delib in your case

Я думаю, что вы получаете эту ошибку из-за периода в имени вашего приложения. Если имя приложения не указано в классе Meta, Django попытается выяснить это самостоятельно, разложив структуру папок. Когда это происходит, он разлагается в «расположении периода» и определяет имя приложения, которое будет medCE или delib в вашем случае, которое, очевидно, не является именем вашего приложения.

Я знаю, что вопрос старый, но, надеюсь, он поможет будущим зрителям

2 голосов
/ 07 февраля 2010

Вы можете просмотреть исходный код Django онлайн:

https://github.com/django/django/blob/master/django/db/models/base.py#L90

Соответствующий код, который выбрасывает исключение, имеет следующий комментарий:

# Figure out the app_label by looking one level up.
# For 'django.contrib.sites.models', this would be 'sites'.

Итаккажется, что код пытается определить приложение, к которому принадлежит модель.

Чтобы отладить это, вы можете просто изменить base.py, чтобы перехватить IndexError и вызвать модель_модуля .__ name __.

...