Python 调用delete()时,我得到';模型不是';尚未加载&x27;Django 2.0.3中的错误

Python 调用delete()时,我得到';模型不是';尚未加载&x27;Django 2.0.3中的错误,python,django,django-2.0,Python,Django,Django 2.0,我在一个名为coins的应用程序中定义了两个模型 models.py from django.db import models class Coin(models.Model): model defintions class CoinData(models.Model): model defintions 我有一个函数,可以使用for循环将数据写入我的硬币模型(这是models.py内部的) 这很好,但每次我向模型写入时,它都会创建一个额外的实例,即使已经存在一个实例。当我

我在一个名为coins的应用程序中定义了两个模型

models.py
from django.db import models

class Coin(models.Model):
   model defintions

class CoinData(models.Model):
     model defintions
我有一个函数,可以使用for循环将数据写入我的硬币模型(这是models.py内部的)

这很好,但每次我向模型写入时,它都会创建一个额外的实例,即使已经存在一个实例。当我完善我的代码时,我只想删除Coin中的所有实例。列表是1500+所以我无法从Admin中删除(这确实有效,但如果我尝试一次删除所有实例,则会产生错误)

因此,我对硬币中的对象运行了许多delete()函数的变体:

Coin.objects.all().delete()

只有在调用delete()时,才会出现错误

    File "C:\Anaconda\lib\site-packages\django\utils\autoreload.py", line 248, in raise_last_exception
    raise _exception[1]
  File "C:\Anaconda\lib\site-packages\django\core\management\__init__.py", line 327, in execute
    autoreload.check_errors(django.setup)()
  File "C:\Anaconda\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "C:\Anaconda\lib\site-packages\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Anaconda\lib\site-packages\django\apps\registry.py", line 112, in populate
    app_config.import_models()
  File "C:\Anaconda\lib\site-packages\django\apps\config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Anaconda\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\mypython\crypt\coins\models.py", line 31, in <module>
    Coin.objects.all().delete()
  File "C:\Anaconda\lib\site-packages\django\db\models\query.py", line 661, in delete
    collector.collect(del_query)
  File "C:\Anaconda\lib\site-packages\django\db\models\deletion.py", line 186, in collect
    if self.can_fast_delete(objs):
  File "C:\Anaconda\lib\site-packages\django\db\models\deletion.py", line 146, in can_fast_delete
    for related in get_candidate_relations_to_delete(opts):
  File "C:\Anaconda\lib\site-packages\django\db\models\deletion.py", line 58, in get_candidate_relations_to_delete
    f for f in opts.get_fields(include_hidden=True)
  File "C:\Anaconda\lib\site-packages\django\db\models\options.py", line 735, in get_fields
    return self._get_fields(include_parents=include_parents, include_hidden=include_hidden)
  File "C:\Anaconda\lib\site-packages\django\db\models\options.py", line 797, in _get_fields
    all_fields = self._relation_tree
  File "C:\Anaconda\lib\site-packages\django\utils\functional.py", line 36, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "C:\Anaconda\lib\site-packages\django\db\models\options.py", line 708, in _relation_tree
    return self._populate_directed_relation_graph()
  File "C:\Anaconda\lib\site-packages\django\db\models\options.py", line 679, in _populate_directed_relation_graph
    all_models = self.apps.get_models(include_auto_created=True)
  File "C:\Anaconda\lib\site-packages\django\apps\registry.py", line 170, in get_models
    self.check_models_ready()
  File "C:\Anaconda\lib\site-packages\django\apps\registry.py", line 132, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
文件“C:\Anaconda\lib\site packages\django\utils\autoreload.py”,第248行,在raise\u last\u异常中 raise_异常[1] 文件“C:\Anaconda\lib\site packages\django\core\management\\uuuu init\uuuuu.py”,第327行,在execute中 自动加载检查错误(django.setup)() 文件“C:\Anaconda\lib\site packages\django\utils\autoreload.py”,第225行,在包装器中 fn(*args,**kwargs) 文件“C:\Anaconda\lib\site packages\django\\uuuuu init\uuuuuu.py”,第24行,在安装程序中 应用程序。填充(设置。已安装的应用程序) 文件“C:\Anaconda\lib\site packages\django\apps\registry.py”,第112行,填充 app_config.import_models() 导入模型中的文件“C:\Anaconda\lib\site packages\django\apps\config.py”,第198行 self.models\u module=导入模块(models\u module\u name) 文件“C:\Anaconda\lib\importlib\\ uuuuu init\uuuuuu.py”,第126行,在导入模块中 return _bootstrap._gcd_import(名称[级别:],包,级别) 文件“”,第994行,在_gcd_导入中 文件“”,第971行,在_find_和_load中 文件“”,第955行,在“查找”和“加载”中解锁 文件“”,第665行,在“加载”中 exec_模块中第678行的文件“” 文件“”,第219行,在“调用”中,删除了“帧” 文件“C:\mypython\crypt\coins\models.py”,第31行,在 Coin.objects.all().delete() 文件“C:\Anaconda\lib\site packages\django\db\models\query.py”,第661行,删除 collector.collect(del_查询) 文件“C:\Anaconda\lib\site packages\django\db\models\deletation.py”,第186行,在collect中 如果self.can\u fast\u delete(objs): 文件“C:\Anaconda\lib\site packages\django\db\models\deletation.py”,第146行,在can\u fast\u delete中 对于相关的in-get\u-candidate\u-to\u-delete关系(选项): 文件“C:\Anaconda\lib\site packages\django\db\models\deletation.py”,第58行,在get\u candidate\u relations\u to\u delete中 f表示opts.get_字段中的f(include_hidden=True) 文件“C:\Anaconda\lib\site packages\django\db\models\options.py”,第735行,在get\u字段中 返回self.\u获取\u字段(包括\u父项=包括\u父项,包括\u隐藏=包括\u隐藏) 文件“C:\Anaconda\lib\site packages\django\db\models\options.py”,第797行,在\u get\u字段中 所有字段=自身关系树 文件“C:\Anaconda\lib\site packages\django\utils\functional.py”,第36行,在__ res=instance.\uuuu dict\uuuu[self.name]=self.func(实例) 文件“C:\Anaconda\lib\site packages\django\db\models\options.py”,第708行,在关系树中 返回自。\填充\定向\关系\图() 文件“C:\Anaconda\lib\site packages\django\db\models\options.py”,第679行,在“填充\定向\关系”图中 所有模型=self.apps.get模型(包括自动创建的模型=True) get\U模型中的文件“C:\Anaconda\lib\site packages\django\apps\registry.py”,第170行 self.check_models_ready() 文件“C:\Anaconda\lib\site packages\django\apps\registry.py”,第132行,在check\u models\u ready中 raise AppRegistryNotReady(“尚未加载模型”) django.core.exceptions.AppRegistryNotReady:尚未加载模型。
“我的对象”上的其他方法,如all()和save()似乎工作得很好?

您的
models.py
不应包括在加载模块时运行查询的代码。这包括其他查询,如
Coin.objects.all()
Coin.save()
(即使它们尚未导致错误)。查看回溯,您可以看到在删除时处理相关对象的代码导致了错误

我将从您的模型中删除
delete()
调用,并在
python manage.py shell中运行它:

from coins.models import Coin
Coin.objects.all().delete()
另一个选项是创建一个,这样您就可以运行
python manage.py delete\u coins
,但在这种情况下,这太过分了


作为开发过程中的黑客,您可能会在方法中添加
delete
,但请注意,文档特别警告了这一点。

您的
模型.py
不应包含在加载模块时运行查询的代码。这包括其他查询,如
Coin.objects.all()
Coin.save()
(即使它们尚未导致错误)。查看回溯,您可以看到在删除时处理相关对象的代码导致了错误

我将从您的模型中删除
delete()
调用,并在
python manage.py shell中运行它:

from coins.models import Coin
Coin.objects.all().delete()
另一个选项是创建一个,这样您就可以运行
python manage.py delete\u coins
,但在这种情况下,这太过分了


作为开发过程中的黑客,您可能会将
删除
放在方法中,但请注意,文档特别警告了这一点。

在Django 1.8上尝试使用独立脚本删除所有对象时也有类似问题:

Traceback (most recent call last):
  File "import_data.py", line 368, in <module>
    import_data_2018(workbook)
  File "import_data.py", line 283, in import_data_2018
    Estates2018.objects.all().delete()
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/query.py", line 536, in delete
    collector.collect(del_query)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/deletion.py", line 193, in collect
    if self.can_fast_delete(objs):
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/deletion.py", line 155, in can_fast_delete
    for related in get_candidate_relations_to_delete(opts):
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/deletion.py", line 67, in <genexpr>
    f for f in candidate_model_fields
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/deletion.py", line 62, in <genexpr>
    opts.get_fields(include_hidden=True) for opts in candidate_models
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/options.py", line 740, in get_fields
    return self._get_fields(include_parents=include_parents, include_hidden=include_hidden)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/options.py", line 802, in _get_fields
    all_fields = self._relation_tree
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/utils/functional.py", line 60, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/options.py", line 709, in _relation_tree
    return self._populate_directed_relation_graph()
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/options.py", line 681, in _populate_directed_relation_graph
    all_models = self.apps.get_models(include_auto_created=True)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/utils/lru_cache.py", line 101, in wrapper
    result = user_function(*args, **kwds)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/apps/registry.py", line 168, in get_models
    self.check_models_ready()
  File "/home/joao/.ve/estates/local/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.

希望这能帮助遇到相同问题的人

在Django 1.8上尝试使用独立脚本删除所有对象时遇到类似问题:

Traceback (most recent call last):
  File "import_data.py", line 368, in <module>
    import_data_2018(workbook)
  File "import_data.py", line 283, in import_data_2018
    Estates2018.objects.all().delete()
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/query.py", line 536, in delete
    collector.collect(del_query)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/deletion.py", line 193, in collect
    if self.can_fast_delete(objs):
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/deletion.py", line 155, in can_fast_delete
    for related in get_candidate_relations_to_delete(opts):
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/deletion.py", line 67, in <genexpr>
    f for f in candidate_model_fields
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/deletion.py", line 62, in <genexpr>
    opts.get_fields(include_hidden=True) for opts in candidate_models
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/options.py", line 740, in get_fields
    return self._get_fields(include_parents=include_parents, include_hidden=include_hidden)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/options.py", line 802, in _get_fields
    all_fields = self._relation_tree
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/utils/functional.py", line 60, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/options.py", line 709, in _relation_tree
    return self._populate_directed_relation_graph()
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/db/models/options.py", line 681, in _populate_directed_relation_graph
    all_models = self.apps.get_models(include_auto_created=True)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/utils/lru_cache.py", line 101, in wrapper
    result = user_function(*args, **kwds)
  File "/home/joao/.ve/estates/local/lib/python2.7/site-packages/django/apps/registry.py", line 168, in get_models
    self.check_models_ready()
  File "/home/joao/.ve/estates/local/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.

希望这能帮助任何面临同样问题的人

我应该说数据库是SQlite,我正在从manage.py runserverQuestion运行服务器,为什么要删除所有记录?它是为了测试应用程序,还是为了真正的生产目的?如果是为了生产,我会创建一个定制的shell管理命令来实现这一点。所以你不必为了删除而启动那个文件
from django import setup as django_setup

django_setup()  # Call it before running anything else on your script