更新后,项目从查询集中消失

时间:2017-06-15 15:13:03

标签: django

使用Django 1.9,我有一些代码在同一个函数的同一个表上进行两个选择查询。代码如下所示:

foo_ids = [1]  # A list of (actually uuids)
foo_qs = Foo.objects.filter(id__in=foo_ids, bar=False)

此时,如果我在代码中打印了查询集,它将显示至少一个项目:

print foo_qs  # [<Foo: Foo(id='1', ...)]

因此,我在此查询集上执行update(),修改bar,但不修改id

rows_updated = foo_qs.update(bar=True)  # 1 updated

此时,print foo_qs将产生[]。由于不再符合bar=False,因此可以预期。但是,如果我现在在代码下创建一个新的查询集,那么该文件看起来类似于:

foo_ids = [1]
foo_qs = Foo.objects.filter(id__in=foo_ids, bar=False)
rows_updated = foo_qs.update(bar=True)
new_foo_qs = Foo.objects.filter(id__in=foo_ids)  # Should contain 1 record

尽管记录在数据库中,new_foo_qs也没有任何内容!

这可以通过首先将foo_ids转换为集合来解决,就像这样。

foo_ids = [1]
foo_qs = Foo.objects.filter(id__in=foo_ids, bar=False)
rows_updated = foo_qs.update(bar=True)
foo_ids = set(foo_ids)
new_foo_qs = Foo.objects.filter(id__in=foo_ids)  # 1 record

为什么会这样?这是我需要了解的一些缓存机制吗?

0 个答案:

没有答案