Django prefetch_related缓存不反映更改

时间:2018-03-03 08:24:46

标签: python django python-3.x django-models django-rest-framework

我有一个模型银行。我有六个实体

这是我的预取代码。

queryset = Banks.objects.all().prefetch_related('field1','field2')

当我将新实体输入我的Banks模型并获取数据时,我仍然只获得旧数据。下载数据时,新添加的实体没有得到反映。

1 个答案:

答案 0 :(得分:0)

请记住,与QuerySets一样,任何暗示不同数据库查询的后续链接方法都将忽略以前缓存的结果,并使用新的数据库查询检索数据。所以,如果你写下面的内容:

>>> pizzas = Pizza.objects.prefetch_related('toppings')
>>> [list(pizza.toppings.filter(spicy=True)) for pizza in pizzas]

...然后pizza.toppings.all()被预取的事实对你没有帮助。 prefetch_related('toppings')隐含pizza.toppings.all(),但pizza.toppings.filter()是一个新的不同查询。预取缓存在这里无济于事;实际上它会损害性能,因为您已经完成了未使用的数据库查询。所以请谨慎使用此功能!

此外,如果您在相关管理器上调用数据库更改方法add()remove()clear()set(),则会清除该关系的任何预取缓存

来自Django Formset Documentation