Python 调用delete()时,我得到';模型不是';尚未加载&x27;Django 2.0.3中的错误
我在一个名为coins的应用程序中定义了两个模型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内部的) 这很好,但每次我向模型写入时,它都会创建一个额外的实例,即使已经存在一个实例。当我
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