1

一部のマシンでのみ発生し、他のマシンでは発生しない「モデルがインストールされていない、または抽象的」エラーが発生していました。さらに深く掘り下げてみると、問題はdjangoで想定されているようにload_app(self, app_name, can_postpone=False)メソッドが機能していないことでした。django.db.models.loading.py

def load_app(self, app_name, can_postpone=False)87行目に、いくつかのprintステートメントを追加しました。(元のコードはこちら:https ://github.com/django/django/blob/master/django/db/models/loading.py#L87 )

    self.handled[app_name] = None
    self.nesting_level += 1
    app_module = import_module(app_name)
    print "APP--", app_name
    try:
        print "APPNAME-BEGIN", app_name, type(app_name)
        models = import_module('.models', app_name)
        print "APPNAME-END__", app_name
        print "LOADD", str(models), app_name
    except ImportError, e:

あなたはapp_nameAPPNAME-BEGIN同じだろうと思うでしょう...app_nameAPPNAME-END__

出力は次のとおりです。

2012-12-20 15:44:12.526254500 APPNAME-BEGIN users <type 'str'>
2012-12-20 15:44:12.590877500 APPNAME-END__ gradmaker
2012-12-20 15:44:12.590877500 LOADD <module 'gradmaker.models' from '/home/gradcon4/gradcon4/project/gradmaker/models.pyc'> gradmaker

どのようにapp_name変化しましたか?間違ったモジュールがインポートされたのはなぜですか?(gradmakerの代わりにusers

これはどのような条件下で発生しますか?

4

1 に答える 1

2

何が起こっているのかというと、import X行の1つがを上げていたということImportErrorです。

つまりimport gradmaker.models as gradmaker、正しくない場合は、from gradmaker import models as gradmaker代わりに使用してください。

ImportErrorによって呼び出された関数の1つによってキャッチされ、import_moduleスキップされました。

そのため、このエラーが発生したアプリは正しくインポートされませんでした。

インポートラインが修正されると、すべてが順調でした。

変数は変更されませんでした。何が起こったのかというと、エラーのためにコードが関数から飛び出し、奇妙な出力をしていました。

于 2012-12-25T01:06:34.623 に答える