1

Django-Treebeard ノードから sub-lassing すると、説明のない (または、少なくともこのコンテキストで解釈する方法がわからない) エラー メッセージが表示され、デバッグ方法がわかりません。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. を実行して、PyPi 1.1 から最新の treebeard バージョンeasy_install django-treebeardをインストールします。easy_install が気に入らない場合は、treebeard ダウンロード ページからリリースをダウンロードするか 、treebeard mercurial リポジトリから 開発バージョンを取得して2 を実行します。django 設定ファイルのセクションに 「treebeard」を追加します。 3. django- treebeard の 抽象ツリー モデルの 1 つから継承する新しいモデルを作成します 。 4.実行する




python setup.py install
INSTALLED_APPS





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 に答える