2014-10-19 54 views
0

我得到这个回溯:的Django 1.7升级错误:使用串行AppRegistryNotReady从rest_framework

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问题,但没有找到与此症状相符的问题。当然,我必须能够像这样定义一系列依赖模型?

回答

0

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

models.py实际上是声明这些序列化器的错误地方(虽然我99%肯定我是这样做的,基于如何使用它们的例子)。

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