我有一个模型银行。我有六个实体。
这是我的预取代码。
queryset = Banks.objects.all().prefetch_related('field1','field2')
当我将新实体输入我的Banks模型并获取数据时,我仍然只获得旧数据。下载数据时,新添加的实体没有得到反映。
答案 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()
,则会清除该关系的任何预取缓存