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中重写了hasheq ,因为我想使用“复制”的特定定义。 猜猜看:我有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)?