django模型:objects.all().delete()不';T

django模型:objects.all().delete()不';T,django,django-models,Django,Django Models,我试图在django模型中清除并重新加载一个表,并且 >>> models.PuzzleSum.objects.all().count() 2644 >>> models.PuzzleSum.objects.all().delete() >>> models.PuzzleSum.objects.all().count() 2535 。。。世界跆拳道联盟?永远是神奇的数字109。我知道我可以直接进入数据库手动删除它们(或者循环直到它们全部消失

我试图在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)

将我的上述评论转换为问题的答案:


由于我想使用的“复制”的特定定义,我已经覆盖了PuzzleSum中的哈希eq。猜猜看:我有109个不同的散列值。Django必须在其删除逻辑的内部某处使用一组对象。

是的,Django将所有对象存储在dict中,然后逐个删除它们。这就是为什么只有唯一的项目会被删除,因为它会对它们进行迭代。这来自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)

只要您已经覆盖了模型的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,当模型存储在self.data dict中时,只存储唯一的模型,然后将其删除。

不知道,可能是PuzzleSum的基本查询集设置为自定义管理器?e、 好主意,但不是。这是一个从django shell运行的数据加载脚本,(尝试)删除是我导入模型后做的第一件事。你能为PuzzSum和任何相关模型添加代码吗?你的模型是如何进入模型的?models.puzzsum.objects.all()?您的模型应该是django.db.models.model的“子类”吗?是吗?明白了!是的,我的模型是models.model的一个子类,但是我已经重写了hash和eq,因为我想使用“duplicate”的一个特定定义。猜猜看:我有109个不同的散列值。Django必须在其删除逻辑的内部某处使用一组对象。