Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么执行Django查询会导致:Django.core.exceptions.AppRegistryNotReady:模型不';还没上膛吗?_Python_Django - Fatal编程技术网

Python 为什么执行Django查询会导致:Django.core.exceptions.AppRegistryNotReady:模型不';还没上膛吗?

Python 为什么执行Django查询会导致:Django.core.exceptions.AppRegistryNotReady:模型不';还没上膛吗?,python,django,Python,Django,我正在从事Django 1.8.2项目 此项目有多个Django应用程序 应用程序app_a的类MyClassA如下: class MyClassA(models.Model): name = models.CharField(max_length=50, null=True, blank=True) @staticmethod def my_static_method(): ret_val = MyClassA.objects.filter()

我正在从事Django 1.8.2项目

此项目有多个Django应用程序

应用程序
app_a
的类
MyClassA
如下:

class MyClassA(models.Model):
    name = models.CharField(max_length=50, null=True, blank=True)

    @staticmethod
    def my_static_method():
        ret_val = MyClassA.objects.filter()
        return "World"
class MyClassB(models.Model):
    name = models.CharField(max_length=50, null=False, blank=False)
    def my_method(self, arg1=MyClassA.my_static_method()):
        return "Hello"
应用程序
app_b
的类
MyClassB
如下:

class MyClassA(models.Model):
    name = models.CharField(max_length=50, null=True, blank=True)

    @staticmethod
    def my_static_method():
        ret_val = MyClassA.objects.filter()
        return "World"
class MyClassB(models.Model):
    name = models.CharField(max_length=50, null=False, blank=False)
    def my_method(self, arg1=MyClassA.my_static_method()):
        return "Hello"
当我运行
manage.py测试时,它工作正常

但是,我将
MyClassA.my_static_method()
更改为以下内容:

@staticmethod
def my_static_method():
    ret_val = MyClassA.objects.filter(name=None)
    return "World"
当我这样做,然后运行
manage.py test
时,它失败并出现以下错误:

  File "my-virtual-env/lib/python2.7/site-packages/django/apps/registry.py", line 131, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
  django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
为什么会这样?我该如何解决这个问题


我所做的唯一更改是添加筛选值
name=None

。在这种情况下,只有在管理器函数中出错时,才会出现错误。我也试过同样的方法,它对我有效。但是,当我在filter()中出错时,我得到了相同的错误。比如MyClassA.objects.filter(在\u模型中的\u字段\u not \u=None)


我想你必须重新检查你的原始代码。检查您的模型是否正常。

在Django中,您不能在导入时运行查询。(有关详细信息,请参阅。)

由于Python中的默认参数值是在定义函数时计算的(与调用函数时相反),因此您的
MyClassB.my_method()
定义正在调用
MyClassA.my_static_method()
,它尝试运行查询

为什么您在一个版本的代码中看到错误而在另一个版本中没有看到?其中一个正在评估查询(即尝试访问数据库),而另一个没有,无论出于何种原因。您有责任确保在导入时所做的任何操作都不会试图访问数据库

如果您的目标是在每次调用时对该默认参数求值,那么Python中的标准习惯用法是:

def my_method(self, arg1=None):
    if arg1 is None:
        arg1 = MyClassA.my_static_method()

1.您是否在
已安装的应用程序中的
应用程序b
之前有
应用程序a
?2.我认为,在添加
name=None
过滤器时出现异常的原因可能与此有关:。也就是说,我认为当您只调用
filter()
时,可能您的查询甚至没有被计算,因此它隐藏了您的问题。如果将
print(ret_val)
添加到空的
filter()
示例中,您可能会看到同样的情况。1。对2.使用空过滤器添加
print ret_val
,不会导致错误。值得注意的是,这不是运行时错误。这是一个编译时错误,因为从未调用
MyClassB.my_method()