错误描述
打算用Django连接MongoDB,于是尝试了一下Djongo,按照官方示例直接将下面的代码照抄到models.py
from djongo import models
class Blog(models.Model):
name = models.CharField(max_length=100)
class Meta:
abstract = True
class Entry(models.Model):
blog = models.EmbeddedField(
model_container=Blog
)
headline = models.CharField(max_length=255)
e = Entry()
e.blog = {
'name': 'Djongo'
}
e.headline = 'The Django MongoDB connector'
e.save()
执行makemigrations
时报错:
manage.py@djangoProject > makemigrations
D:\git\djangoProject\venv\Scripts\python.exe "D:\Software\JetBrains\PyCharm 2021.3.2\plugins\python\helpers\pycharm\django_manage.py" makemigrations D:/git/djangoProject
Tracking file by folder pattern: migrations
Traceback (most recent call last):
File "D:\Software\JetBrains\PyCharm 2021.3.2\plugins\python\helpers\pycharm\django_manage.py", line 52, in <module>
run_command()
File "D:\Software\JetBrains\PyCharm 2021.3.2\plugins\python\helpers\pycharm\django_manage.py", line 46, in run_command
run_module(manage_file, None, '__main__', True)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\runpy.py", line 205, in run_module
return _run_module_code(code, init_globals, run_name, mod_spec)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "D:/git/djangoProject\manage.py", line 24, in <module>
main()
File "D:/git/djangoProject\manage.py", line 11, in main
django.setup()
File "D:\git\djangoProject\venv\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "D:\git\djangoProject\venv\lib\site-packages\django\apps\registry.py", line 114, in populate
app_config.import_models()
File "D:\git\djangoProject\venv\lib\site-packages\django\apps\config.py", line 301, in import_models
self.models_module = import_module(models_module_name)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "D:/git/djangoProject\user\models.py", line 20, in <module>
e.save()
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\base.py", line 740, in save
force_update=force_update, update_fields=update_fields)
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\base.py", line 778, in save_base
force_update, using, update_fields,
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\base.py", line 881, in _save_table
results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\base.py", line 921, in _do_insert
using=using, raw=raw,
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\query.py", line 1270, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1415, in execute_sql
for sql, params in self.as_sql():
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1360, in as_sql
for obj in self.query.objs
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1360, in <listcomp>
for obj in self.query.objs
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1359, in <listcomp>
[self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1300, in prepare_value
value = field.get_db_prep_save(value, connection=self.connection)
File "D:\git\djangoProject\venv\lib\site-packages\djongo\models\fields.py", line 231, in get_db_prep_save
connection)
File "D:\git\djangoProject\venv\lib\site-packages\djongo\models\fields.py", line 155, in _save_value_thru_fields
for field in self.model_container._meta.get_fields():
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\options.py", line 778, in get_fields
return self._get_fields(include_parents=include_parents, include_hidden=include_hidden)
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\options.py", line 838, in _get_fields
all_fields = self._relation_tree
File "D:\git\djangoProject\venv\lib\site-packages\django\utils\functional.py", line 48, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\options.py", line 751, in _relation_tree
return self._populate_directed_relation_graph()
File "D:\git\djangoProject\venv\lib\site-packages\django\db\models\options.py", line 721, in _populate_directed_relation_graph
all_models = self.apps.get_models(include_auto_created=True)
File "D:\git\djangoProject\venv\lib\site-packages\django\apps\registry.py", line 179, in get_models
self.check_models_ready()
File "D:\git\djangoProject\venv\lib\site-packages\django\apps\registry.py", line 141, in check_models_ready
raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
Process finished with exit code 1
解决方案
网上搜了一大圈,发现错误原因千奇百怪,根据https://www.liangzl.com/get-article-detail-1704.html,发现:
Apps aren’t loaded yet 报错是一个比较大的范围,本文的方法适不适用于你,一定要看清开头的报错内容是否与我的一致。
于是开始看报错详情,在上面的报错输出第33行发现问题出在models.py
File "D:/git/djangoProject\user\models.py", line 20, in <module>
e.save()
估计这里直接执行插入数据的时候出问题了(毕竟还没建表),于是把上面models.py的15-20行删除,顺利解决。
结论:django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
的错误原因太宽泛,网上的解决方案五花八门,需要直接看错误输出,但错误输出的调用栈太深,需要慢慢往上找定位具体的错误语句。