2010-02-07 3 views
1

Django-Treebeard 노드에서 서브 레이싱 할 때 비 설명적인 (또는 적어도이 컨텍스트에서 해석하는 방법을 모른다는) 오류 메시지가 나타납니다. 디버깅하는 방법을 모르겠습니다. 설치 지침 (http://code.tabo.pe/django-treebeard/src/tip/tbexample/)을 사용하고 있습니다 (게시 마지막 부분 참조).지침에 따라 Django-Treebeard를 설치하려고 할 때 예외

나는 MP_Node의 하위 클래스를 만들고 syncdb가 작동합니다. 그러나 models.py 코드를 쉘에로드하면 "목록 색인 범위를 벗어남"오류가 발생합니다 (아래 코드 및 추적 참조).

도움 주셔서 감사합니다.

파이썬 2.6.4, 장고 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. 실행 easy_install django-treebeard
최신 설치 PyPi의 트리 비어 버전
1.1. 당신이 easy_install을 마음에 들지 않으면,
나무 수염 다운로드 페이지에서 릴리스를 다운로드하거나 나무 수염 수은 저장소에서 개발 버전
을 얻을하고
INSTALLED_APPS 섹션
python setup.py install
2. 추가 '나무 수염을'실행 django 설정 파일 mp_tree.MP_Node (경로를 구체화),
ns_tree.NS_Node (중첩 된 세트) 또는 al_tree.AL_Node
(인접리스트) :
3. 장고 - 나무 수염의
추상 트리 모델 중 하나에서 상속 새로운 모델을 만들 수 있습니다.
4. 실행 python manage.py syncdb

+0

을 도와 드리겠습니다. – user265775

답변

2

당신은 장고 소스 코드를 온라인으로 찾아 볼 수 있습니다 :

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

그래서 보인다

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

예외를 발생 관련 코드이 댓글이 있습니다 코드가 모델이 속한 앱을 결정하려고합니다.

이것을 디버깅하려면 base.py를 수정하여 IndexError를 catch하고 model_module .__ name__을 올리면됩니다.

+0

답변 해 주셔서 감사합니다. app_label 코멘트가 블로그인지 확인했습니다. 그래서 lib/site-packages 아래에 처음부터 django/contrib 디렉토리 아래에 treebeard 코드를 옮겼습니다. 여전히 같은 오류가 발생합니다. 나는 app_label이 무엇을 찾고 있는지, 왜 그것을 발견 할 수 없는지 이해하지 못한다. 나는 가장 기본적인 설치 지침과 MP_Node의 가장 바닐라 하위 분류를 따르려고 노력하고있다. 그러나 아무도보고하지 않는 것 같다. 이 문제. – user265775

+0

어떤 식 으로든 코드를 수정할 필요는 없지만 다른 대답을 얻지 못할 경우를 대비하여 제안을 자세히 설명 할 수 있습니다. 이것을 디버깅하려면 base.py를 수정하여 IndexError를 catch하고 model_module을 발생 시키면됩니다 ._이름_. 저는 Python과 Django를 처음 접했습니다. 감사! – user265775

+0

충돌하는 클래스는 '__builtin__'입니다. 인쇄 "base.ModelBase> model_module"model_module 번호 디버그 시도 : 나는 당신의 제안에 따라 코드를 변경 one_up = model_module .__ 이름 __ 분할 ('.') - 2] IndexError 제외 :. one_up = " treebeard " kwargs = {"app_label ": one_up} 이제는 작동하지만 지침에 기반한 바닐라 설치가 작동하지 않는 이유는 아직 알지 못합니다. 어딘가에 대한 언급을 찾을 수있을 것 같습니다. – user265775

3

오늘 같은 오류가있었습니다. 당신이 먼저 models.py 파일 및 각 클래스에 가서 해결하려면 다른 클래스를 추가 할 수 있습니다

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

당신이 때문에 앱 이름에 마침표이 오류를 받고 있다고 생각합니다. 앱 이름이 Meta 클래스와 함께 제공되지 않으면 장고는 폴더 구조를 분해하여 앱 이름을 알아 내려고 시도합니다. 그런 일이 발생하면 '기간 위치'에서 분해되어 앱 이름이 medCE 또는 delib 인 것으로 파악됩니다. 앱 이름은 분명히 앱 이름이 아닙니다.

나는 문제는 오래 알고 있지만, 희망 그것은 나무 수염 디렉토리가 장고 /있는 contrib 아래에 있지만, 직접 사이트 패키지 아래에 설치되어 있지 않은 경우 나 또한 같은 오류가 미래의 시청자