您的位置:

django出现AppRegistryNotReady("Models aren't loaded yet.")的解决方案

  发布时间:2023-03-05 13:46:13
报错的原因这通常是由于你在 Django 的应用初始化之前尝试使用模型。这可能是由于在 Django 的应用加载之前执行了 Python 代码。为了解决这个问题,你应该将你的代码移动到 Django 应用加载之后。例如,你可以将它移动到应用的 `ready` 方法中在这里使用模型或者,你也可以使用 Django 的信号在这里使用模型还有一种解决方案是使用 Django 的方法在这里使用模型这些方法都可以帮助你避免在 Django 应用未加载之前使用模型。

报错的原因

这通常是由于你在 Django 的应用初始化之前尝试使用模型。这可能是由于在 Django 的应用加载之前执行了 Python 代码。

为了解决这个问题,你应该将你的代码移动到 Django 应用加载之后。例如,你可以将它移动到应用的 `ready` 方法中。


from django.apps import AppConfig

class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        # 在这里使用模型
        from . import signals

或者,你也可以使用 Django 的 `AppConfig.ready()` 信号。


from django.apps import AppConfig
from django.db.models.signals import post_migrate

def create_custom_permissions(sender, **kwargs):
    # 在这里使用模型

class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        post_migrate.connect(create_custom_permissions, sender=self)

还有一种解决方案是使用 Django 的 `django.apps.ready` 方法。


from django.apps import apps

def create_custom_permissions():
    # 在这里使用模型

apps.ready(create_custom_permissions)

这些方法都可以帮助你避免在 Django 应用未加载之前使用模型。

如何解决

为了解决这个问题,你应该将你的代码移动到 Django 应用加载之后。例如,你可以将它移动到应用的 `ready` 方法中。


from django.apps import AppConfig

class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        # 在这里使用模型
        from . import signals

或者,你也可以使用 Django 的 `AppConfig.ready()` 信号。


from django.apps import AppConfig
from django.db.models.signals import post_migrate

def create_custom_permissions(sender, **kwargs):
    # 在这里使用模型

class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        post_migrate.connect(create_custom_permissions, sender=self)

还有一种解决方案是使用 Django 的 `django.apps.ready` 方法。


from django.apps import apps

def create_custom_permissions():
    # 在这里使用模型

apps.ready(create_custom_permissions)

这些方法都可以帮助你避免在 Django 应用未加载之前使用模型。

使用例子

这是一个使用 `ready` 方法的例子:


from django.apps import AppConfig

class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        # 这里可以使用模型
        from . import signals

这是一个使用 `AppConfig.ready()` 信号的例子:


from django.apps import AppConfig
from django.db.models.signals import post_migrate

def create_custom_permissions(sender, **kwargs):
    # 这里可以使用模型

class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        post_migrate.connect(create_custom_permissions, sender=self)

这是一个使用 `django.apps.ready` 的例子:


from django.apps import apps

def create_custom_permissions():
    # 这里可以使用模型

apps.ready(create_custom_permissions)

在这些例子中,你可以在 Django 应用加载之后使用模型。