Ala*_*anL 11 django django-models
我想在我的django模型中清理并重新加载一个表,并且
>>> models.PuzzleSum.objects.all().count()
2644
>>> models.PuzzleSum.objects.all().delete()
>>> models.PuzzleSum.objects.all().count()
2535
Run Code Online (Sandbox Code Playgroud)
... wtf?总是神奇的数字109.我知道我可以进入数据库并手动删除它们(或循环直到它们全部消失)但我很好奇.
(Mac OS X Lion btw上的Django 1.3.1)
是的,Django将所有对象存储在dict中,然后将它们一一删除。这就是为什么只删除唯一项的原因,因为它会遍历它们。这来自Django Collector类,该类收集要删除的模型:
self.data = SortedDict([(model, self.data[model])
for model in sorted_models])
Run Code Online (Sandbox Code Playgroud)
然后:
# 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)
Run Code Online (Sandbox Code Playgroud)
只要您覆盖了__hash__模型的,当模型存储在self.data dict中时,只会存储唯一的模型,然后将其删除。
| 归档时间: |
|
| 查看次数: |
7350 次 |
| 最近记录: |