1

我遇到了“模型未安装或抽象”错误,这些错误只发生在某些机器上而不是其他机器上,当我深入研究时,我发现问题是load_app(self, app_name, can_postpone=False)方法django.db.models.loading.py没有像 django 假设的那样工作。

def load_app(self, app_name, can_postpone=False)第 87 行,我添加了一些打印语句。(这里的原始代码: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_nameat与...中的APPNAME-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线提高了ImportError.

ieimport gradmaker.models as gradmaker不正确,请from gradmaker import models as gradmaker改用。

ImportError调用的函数之一捕获import_module并跳过。

因此,发生此错误的应用程序未正确导入。

导入线修复后,一切都很好。

变量没有改变,发生的事情是代码由于错误而跳出函数,并产生了奇怪的输出。

于 2012-12-25T01:06:34.623 回答