2010-12-07 10 views
26

が失敗します。エラーが表示されます。これはエラーです:Djangoシェルでモデルクラスを定義すると、

>>> from django.db import models 
>>> class Poll(models.Model): 
...  question = models.CharField(max_length=200) 
...  pub_date = models.DateTimeField('date published') 
... 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "D:\Python25\lib\site-packages\django\db\models\base.py", line 51, in __new__ 
    kwargs = {"app_label": model_module.__name__.split('.')[-2]} 
IndexError: list index out of range 

私は何ができますか?

+0

http://stackoverflow.com/questions/2215403/exception-when-trying-to-install-django-treebeard-based-on-instructions – pyfunc

+0

その場所でmodel_module .__ name__を印刷してみましょう。 – pyfunc

答えて

44

モデル定義は、アプリケーションに来なければならない - あなたが見ているエラーは、それが取るしようとしていることがあり__name__model_moduleからproject\appname\models.pyためproject.appname.modelsのようなものであるべきである - と、appnameをアプリ名を取得します。対話型コンソールでは、モジュールの__name__'__main__'です - 失敗します。

これを回避するには、Metaクラスでapp_labelを自分で指定する必要があります。あなたがD:\Python25\lib\site-packages\django\db\models\base.py、トレースバックに言及したそのファイルを見て、それを行うことができる理由の説明については

>>> from django.db import models 
>>> class Poll(models.Model): 
...  question = models.CharField(max_length=200) 
...  pub_date = models.DateTimeField('date published') 
...  class Meta: 
...   app_label = 'test' 

if getattr(meta, 'app_label', None) is None: 
     # Figure out the app_label by looking one level up. 
     # For 'django.contrib.sites.models', this would be 'sites'. 
     model_module = sys.modules[new_class.__module__] 
     kwargs = {"app_label": model_module.__name__.split('.')[-2]} 
    else: 
     kwargs = {} 

を(metaMetaクラスである場合は、そのファイルにちょうど上記を参照。)

+0

こんにちは@Chris、私のアプリの名前は "task2"なので、私はapp_label = 'task2'と書くべきですか? – zjm1126

+4

@ zjm1126:そうだよ。これは対話型コンソールにあるので、実際には問題はありません。何らかの理由でモデルをちょうど乱暴に思っていると思います。もし 'task2'にあるものを使いたいのであれば、' from task2.models import Poll'を使うべきです。 –

0

他の回答は、対話型のプロンプトでは間違いなく機能しますが、最初のコードブロックの意図が実際に実行されることは意図していないと思います。 the models documentationのコードの直後に、前のチュートリアルで作成したmodels.pyファイルに次のコードを挿入することが期待されています。私のためにどんな頭痛も!

+0

さらに、このパラグラフでは、「上記のPersonモデルは...のようなデータベーステーブルを作成するでしょう」という言い方をしています。実際にはそのまま実行されることは決してありませんでした。 –

0

Eclipse、Django、およびPyDevを使用してこの問題が発生しました。 PyDevパッケージエクスプローラ(左パネル)でアプリケーションを選択して(たとえば、いくつかの.pyファイルの代わりに)、Runをクリックしてすべてが正しく機能するようにする必要がありました。

関連する問題