我正在尝试清除并重新加载 django 模型中的表,并且
>>> models.PuzzleSum.objects.all().count()
2644
>>> models.PuzzleSum.objects.all().delete()
>>> models.PuzzleSum.objects.all().count()
2535
...什么鬼?总是神奇的数字 109。我知道我可以进入数据库并手动删除它们(或循环直到它们全部消失),但我很好奇。
(顺便说一句,Mac OS X Lion 上的 Django 1.3.1)
是的,Django将所有对象存储在一个字典中,然后将它们一一删除。这就是为什么只有唯一的项目被删除的原因,因为它会迭代它们。这是来自 Django集电极 https://github.com/django/django/blob/master/django/db/models/deletion.py类,收集要删除的模型:
self.data = SortedDict([(model, self.data[model])
for model in sorted_models])
进而:
# delete instances
for model, instances in self.data.iteritems():
query = sql.DeleteQuery(model)
pk_list = [obj.pk for obj in instances]
query.delete_batch(pk_list, self.using)
只要你已经覆盖了__hash__
的模型,当模型存储在 self.data 字典中时,仅存储唯一的模型,然后将其删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)