【发布时间】:2018-03-29 16:03:26
【问题描述】:
我在一个名为 coin 的应用中定义了两个模型。
models.py
from django.db import models
class Coin(models.Model):
model defintions
class CoinData(models.Model):
model defintions
我有一个函数可以使用 for 循环将数据写入我的 Coin 模型(在 models.py 中)
models.py
for each_item in list:
each_item = Coin(name=each_item)
这很好用,但每次我写入模型时,它都会创建一个额外的实例,即使一个已经存在。当我优化我的代码时,我只想删除 Coin 中的所有实例。列表是 1500+,所以我无法从 Admin 中删除(这确实有效,但如果我尝试一次删除所有实例,则会产生错误)。
所以我在 Coins 中的对象上运行 delete() 函数的许多变体:
Coin.objects.all().delete()
或者
for x in Coin.objects.all()
x.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.
我的对象上的其他方法,例如 all() 和 save() 似乎工作得很好?
【问题讨论】:
-
我应该说数据库是SQlite,我从manage.py runserver运行服务器
-
问题,你为什么要删除所有记录?是为了测试应用程序,还是服务于真正的生产目的?如果这是生产目的,我会创建一个自定义 shell 管理命令来执行此操作。因此,您不必启动该文件来删除硬币。如果它是用于测试环境(我假设)仍在创建命令 - 甚至删除 django 创建的 sqllite 数据库将是一条简单的路线。但是无论如何,学习 django 管理 shell 对你的应用程序开发来说都是至关重要的,所以继续吧.... b
标签: python django django-2.0