当从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
答案 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 __。