尝试根据指令安装Django-Treebeard时出现异常

时间:2010-02-07 00:45:02

标签: python django-treebeard

当从Django-Treebeard节点进行子进程并且不确定如何调试时,我得到一个非描述性的(或者至少我不知道如何在此上下文中解释)错误消息。我正在使用安装说明:http://code.tabo.pe/django-treebeard/src/tip/tbexample/(请参阅发布结束时)。

我创建了MP_Node的子类,syncdb正常工作。但是,将models.py代码加载到shell中会产生“列表索引超出范围”错误 - 请参阅下面的代码和跟踪。

感谢您的帮助。

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以安装
       来自PyPi的最新treebeard版本        1.1。如果您不喜欢easy_install,请从中下载一个版本        treebeard下载页面或获得开发版本
       从treebeard mercurial存储库运行
       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 个答案:

答案 0 :(得分:3)

我今天遇到了同样的错误。要修复你,首先转到models.py文件,在每个类中你必须添加另一个类:

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

我认为您因应用名称中的句号而收到此错误。如果没有为Meta类提供应用程序名称,Django将尝试通过分解文件夹结构来自行解决。当发生这种情况时,它会在“期间”位置分解。并根据您的情况确定应用名称为medCE或delib,这显然不是您的应用名称。

我知道问题已经过时了,但希望它可以帮助未来的观众

答案 1 :(得分:2)

您可以在线浏览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并引发model_module .__ name __。