Python Django 1.7:惰性评估以避免;应用程序注册表isn';“还没准备好”;在models.py中

Python Django 1.7:惰性评估以避免;应用程序注册表isn';“还没准备好”;在models.py中,python,django,lazy-evaluation,Python,Django,Lazy Evaluation,我在模型的方法定义中有一个查询: 'content_type_id': ContentType.objects.get_for_model(model).pk, 并引发“应用程序注册表尚未准备就绪” 将该行放在另一个独立函数中也没有帮助,因为它仍然会被调用 Django文件: 在模型中导入时使用ORM执行数据库查询 模块也将触发此异常。ORM无法运行 直到所有型号都可用 我怎样才能使它成为这条线的一部分? 我考虑通过发出一个管理命令,将其结果手动缓存到一个文件中。然后读取缓存结果,但应该有更

我在模型的方法定义中有一个查询:

'content_type_id': ContentType.objects.get_for_model(model).pk,

并引发“应用程序注册表尚未准备就绪”

将该行放在另一个独立函数中也没有帮助,因为它仍然会被调用

Django文件:

在模型中导入时使用ORM执行数据库查询 模块也将触发此异常。ORM无法运行 直到所有型号都可用

我怎样才能使它成为这条线的一部分? 我考虑通过发出一个管理命令,将其结果手动缓存到一个文件中。然后读取缓存结果,但应该有更好/更干净的解决方案(?)

/manage.py shell
回溯(最近一次呼叫最后一次):
文件“/manage.py”,第10行,在
从命令行(sys.argv)执行命令
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/core/management/_init__.py”,第385行,从命令行执行
utility.execute()
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/core/management/_init__.py”,第354行,在execute中
django.setup()
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/_-init____;.py”,第21行,在安装程序中
应用程序。填充(设置。已安装的应用程序)
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/apps/registry.py”,第108行,填充
app_config.import_models(所有_models)
导入模型中的文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/apps/config.py”,第202行
self.models\u module=导入模块(models\u module\u name)
文件“/usr/lib/python2.7/importlib/_init_uuu.py”,第37行,在导入模块中
__导入(名称)
文件“/var/www/something.com/something/current/apps/riding/models.py”,第32行,在
类别RidingSection(类别库):
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/mptt/models.py”,第244行,新__
cls=元寄存器(cls)
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/mptt/models.py”,第325行,在注册表中
obj=获取属性(cls,属性)
文件“/var/www/something.com/something/current/apps/tagging/fields.py”,第54行,在__
返回\u标签的编辑\u字符串\u(模型(所有者)的Tag.objects.usage\u)
文件“/var/www/something.com/something/current/apps/tagging/models.py”,第148行,在模型的用法中
用法=self.usage\u for\u queryset(queryset,counts,min\u count)
文件“/var/www/something.com/something/current/apps/tagging/models.py”,第185行,用于查询集
返回self.\u获取\u用法(queryset.model、计数、最小计数、额外连接、额外条件、参数)
文件“/var/www/something.com/something/current/apps/tagging/models.py”,第107行,在
“content\u type\u id”:ContentType.objects.get\u for\u model(model.pk),
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/contrib/contenttypes/models.py”,第50行,在get_for_model中
默认值={'name':智能文本(opts.verbose\u name\u raw)},
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/manager.py”,第92行,在manager_方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/query.py”,第422行,在get_或_create中
返回self.get(**查找),False
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/query.py”,get中第345行
clone=self.filter(*args,**kwargs)
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/query.py”,第691行,在过滤器中
返回self.\u filter\u或\u exclude(False、*args、**kwargs)
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/query.py”,第709行,在“过滤器”或“排除”中
clone.query.add_q(q(*args,**kwargs))
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/sql/query.py”,第1287行,在Addq中
子句,require\u inner=self.\u add\u q(其中,self部分,self.used\u别名)
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/sql/query.py”,第1314行,在“添加”q中
电流_否定=电流_否定,连接器=连接器)
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/sql/query.py”,第1138行,内置过滤器
查找、部件、引用\u聚合=self.solve\u查找\u类型(arg)
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/sql/query.py”,第1076行,在solve\u lookup\u类型中
_,字段,\,查找\u parts=self.names\u to\u path(查找\u拆分,self.get\u meta())
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/sql/query.py”,第1339行,位于names\u to\u路径中
字段,模型,直接,m2m=opts。按名称(名称)获取字段
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/options.py”,第416行,按名称获取字段
cache=self.init\u name\u map()
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/options.py”,第445行,在init_name_map中
对于f,在self中建模。使用模型()获取所有相关对象:
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/options.py”,第563行,在get_all_related__m2m_objects_with_model中
cache=self.\u fill\u related\u many\u to\u many\u cache()
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site packages/django/db/models/options.py”,第577行,在“填充”相关的“多对多”缓存中
对于self.apps.get_models()中的klass:
文件“/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/ut
./manage.py shell
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
  execute_from_command_line(sys.argv)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
  utility.execute()
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
  django.setup()
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
  apps.populate(settings.INSTALLED_APPS)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
  app_config.import_models(all_models)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
  self.models_module = import_module(models_module_name)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
  __import__(name)
File "/var/www/something.com/something/current/apps/riding/models.py", line 32, in <module>
  class RidingSection(CategoryBase):
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/mptt/models.py", line 244, in __new__
  cls = meta.register(cls)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/mptt/models.py", line 325, in register
  obj = getattr(cls, attr)
File "/var/www/something.com/something/current/apps/tagging/fields.py", line 54, in __get__
  return edit_string_for_tags(Tag.objects.usage_for_model(owner))
File "/var/www/something.com/something/current/apps/tagging/models.py", line 148, in usage_for_model
  usage = self.usage_for_queryset(queryset, counts, min_count)
File "/var/www/something.com/something/current/apps/tagging/models.py", line 185, in usage_for_queryset
  return self._get_usage(queryset.model, counts, min_count, extra_joins, extra_criteria, params)
File "/var/www/something.com/something/current/apps/tagging/models.py", line 107, in _get_usage
  'content_type_id': ContentType.objects.get_for_model(model).pk,
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/contrib/contenttypes/models.py", line 50, in get_for_model
  defaults={'name': smart_text(opts.verbose_name_raw)},
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/manager.py", line 92, in manager_method
  return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/query.py", line 422, in get_or_create
  return self.get(**lookup), False
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/query.py", line 345, in get
  clone = self.filter(*args, **kwargs)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/query.py", line 691, in filter
  return self._filter_or_exclude(False, *args, **kwargs)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/query.py", line 709, in _filter_or_exclude
  clone.query.add_q(Q(*args, **kwargs))
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1287, in add_q
  clause, require_inner = self._add_q(where_part, self.used_aliases)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1314, in _add_q
  current_negated=current_negated, connector=connector)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1138, in build_filter
  lookups, parts, reffed_aggregate = self.solve_lookup_type(arg)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1076, in solve_lookup_type
  _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1339, in names_to_path
  field, model, direct, m2m = opts.get_field_by_name(name)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/options.py", line 416, in get_field_by_name
  cache = self.init_name_map()
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/options.py", line 445, in init_name_map
  for f, model in self.get_all_related_m2m_objects_with_model():
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/options.py", line 563, in get_all_related_m2m_objects_with_model
  cache = self._fill_related_many_to_many_cache()
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/db/models/options.py", line 577, in _fill_related_many_to_many_cache
  for klass in self.apps.get_models():
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/utils/lru_cache.py", line 101, in wrapper
  result = user_function(*args, **kwds)
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 168, in get_models
  self.check_models_ready()
File "/var/www/something.com/something/shared/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 131, in check_models_ready
  raise AppRegistryNotReady("Models aren't loaded yet.")
# in apps.py
class SomeAppConfig(AppConfig):
    def ready(self):
        from . import signals
# in apps.py
class SomeAppConfig(AppConfig):
    def ready(self):
        mgr = TagManager()
        mgr._get_usage(#some_args)