0

我得到这个回溯:

Traceback (most recent call last):
  File "./manage.py", line 38, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/apps/config.py", line 197, in import_models
    self.models_module = import_module(models_module_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/Users/mgregory/Documents/cm_central/cmh_server/models.py", line 88, in <module>
    class VersionSerializer(serializers.ModelSerializer):
  File "/Users/mgregory/Documents/cm_central/cmh_server/models.py", line 89, in VersionSerializer
    brzs= BrzSerializer(many=True)
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/rest_framework/serializers.py", line 198, in __init__
    self.fields = self.get_fields()
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/rest_framework/serializers.py", line 234, in get_fields
    default_fields = self.get_default_fields()
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/rest_framework/serializers.py", line 732, in get_default_fields
    reverse_rels = opts.get_all_related_objects()
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/db/models/options.py", line 498, in get_all_related_objects
    include_proxy_eq=include_proxy_eq)]
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/db/models/options.py", line 510, in get_all_related_objects_with_model
    self._fill_related_objects_cache()
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/db/models/options.py", line 533, in _fill_related_objects_cache
    for klass in self.apps.get_models(include_auto_created=True):
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/utils/lru_cache.py", line 101, in wrapper
    result = user_function(*args, **kwds)
  File "/Users/mgregory/Documents/virtualenvs/cm_central/lib/python2.7/site-packages/django/apps/registry.py", line 168, in get_models
    self.check_models_ready()
  File "/Users/mgregory/Documents/virtualenvs/cm_central/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.

从此代码(models.py):

# Serializers for transmitting CMx install information over HTTP

class BrzSerializer(serializers.ModelSerializer):
    class Meta:
        model = Brz
        fields=('filename',)

class VersionSerializer(serializers.ModelSerializer):
    brzs= BrzSerializer(many=True)
    class Meta:
        model = Version
        fields=('name', 'for_mac', 'for_windows', 'brzs')

这听起来像是在告诉我“你的 VersionSerializer 不能有 BrzSerializer,因为你还没有注册它”。

我查看了与 AppRegisteryNotReady 相关的其他 SO 问题,但没有找到与此症状匹配的问题。当然,我必须能够定义这样的依赖模型链吗?

4

1 回答 1

0

事实证明,在内部声明序列化models.py程序会导致在应用注册表完成加载之前使用该应用程序。

models.py实际上是声明这些序列化程序的错误位置(尽管我 99% 确定我是根据如何使用它们的示例这样做的)。

解决方法是将序列化程序的声明移到它们自己的文件中(这是有道理的,因为它们与 models.py 定义的数据库模式无关),然后从视图中导入。当视图开始运行时,应用程序注册表已准备就绪。

于 2014-10-19T07:46:56.520 回答