django模型:objects.all()。delete()不
我想清除并重新加载我的django模型中的表格
>>> models.PuzzleSum.objects.all().count()
2644
>>> models.PuzzleSum.objects.all().delete()
>>> models.PuzzleSum.objects.all().count()
2535
... wtf? 总是魔术数字109.我知道我可以进入数据库并手动删除它们(或循环直到它们全部消失),但我很好奇。
(在Mac OS X Lion btw上的Django 1.3.1)
是的,Django将所有对象存储在字典中,然后逐个删除它们。 这就是为什么只有独特的项目被删除,因为它迭代它们。 这是从Django收集器类收集删除模型:
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字典中时,只有唯一的模型被存储,然后被删除。
将上面的评论转换为问题的答案:
我在PuzzleSum中重写了hash和eq ,因为我想使用“复制”的特定定义。 猜猜看:我有109个不同的散列值。 Django必须在其内部的删除逻辑中使用一组对象。
链接地址: http://www.djcxy.com/p/62103.html上一篇: django model: objects.all().delete() doesn't
下一篇: How does method overload resolution work (LINQ Where extension method)?