1

在从 Django-Treebeard 节点进行子激光传输时,我收到一条非描述性的(或者至少我不知道如何在这种情况下解释)错误消息,并且不确定如何调试。我正在使用以下位置的安装说明:http ://code.tabo.pe/django-treebeard/src/tip/tbexample/ (见帖子末尾)。

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

谢谢你的帮助。

Python 2.6.4、Django 1.1、树须 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.从 PyPi 1.1运行easy_install django-treebeard以安装
最新的 treebeard 版本。
如果您不喜欢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

4

2 回答 2

3

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

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

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

我知道这个问题很老,但希望它能帮助未来的观众

于 2012-07-11T17:48:38.637 回答
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__。

于 2010-02-07T10:28:01.490 回答