【问题标题】:Django-activity-stream : Apps aren't loaded yetDjango-activity-stream :尚未加载应用程序
【发布时间】:2016-06-01 05:49:05
【问题描述】:

我尝试使用 Django-activity-stream 包,但配置有问题 (http://django-activity-stream.readthedocs.org/en/latest/configuration.html)。

我的项目名称是 proj,我想在 ma​​in_app 活动中使用这个包。

/项目

/proj /main_app

所以在 main_app/apps.py 我这样做了:

from django.apps import AppConfig
from actstream import registry


class MainAppConfig(AppConfig):
    name = 'main_app'

    def ready(self):
        registry.register(self.get_model('Car'))

但是当我在 main_app/init.py 中添加这一行时出现错误:

default_app_config = 'main_app.apps.MainAppConfig'

错误:

  Traceback (most recent call last):
  File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
 File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 176, in fetch_command
commands = get_commands()
     File "/usr/local/lib/python2.7/dist-packages/django/utils/lru_cache.py", line 100, in wrapper
result = user_function(*args, **kwds)
     File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 71, in get_commands
for app_config in reversed(list(apps.get_app_configs())):
     File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 137, in get_app_configs
   self.check_apps_ready()
        File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 124, in check_apps_ready

 raise AppRegistryNotReady("Apps aren't loaded yet.")
 django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

我的设置:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',
    'django.contrib.sites',
    'main_app',
    'actstream',
]

编辑(2):

现在我在 main_app/apps.py 中有这个:

从 django.apps 导入 AppConfig

class MainAppConfig(AppConfig):
    name = 'main_app'

def ready(self):
    from actstream import registry
    registry.register(self.get_model('Car'))

【问题讨论】:

    标签: python django


    【解决方案1】:

    从 django.apps 导入 AppConfig

    类 MainAppConfig(AppConfig): 名称 = 'main_app'

    def ready(self):
        from actstream import registry
        registry.register(self.get_model('Car'))
    

    为什么?因为在调用 ready() 之前不会导入注册表。如果注册表是预先导入的,我们会在堆栈跟踪中看到 actstream.compat 从 django.contrib.contenttypes 导入字段。此模块导入模型 ContentType。请参阅:https://docs.djangoproject.com/en/1.9/ref/applications/#how-applications-are-loaded。 “换句话说,你的应用程序的根包和定义你的应用程序配置类的模块不应该导入任何模型,即使是间接的。”

    为了彻底解决这个问题,我们必须在使用 actstream 的注册表模块之前以某种方式阻止任何其他间接导入的模型。

    【讨论】:

      【解决方案2】:

      当你运行它时,Django 还没有准备好。您应该设置环境变量,并设置 django(通常在 wsgi 加载 django 应用程序时运行):

      import os
      import django
      os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
      os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
      django.setup()
      
      from django.apps import AppConfig
      
      class MainAppConfig(AppConfig):
          name = 'main_app'
      
          def ready(self):
              from actstream import registry
              registry.register(self.get_model('Car'))
      

      【讨论】:

      • 你在哪里写的?
      • 我在我的应用程序的 apps.py 中写了这个(见我的帖子,我编辑过)但我有同样的错误:/
      • 谢谢,但现在我执行“python manage.py runserver”时什么也没有发生
      • 当我在def ready(self) 中找到from actstream import registry 时,它可以工作.. 为什么?
      • 你所说的“定位”是什么意思
      猜你喜欢
      • 2017-08-21
      • 2016-08-04
      • 2016-01-08
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2021-02-09
      相关资源
      最近更新 更多