gpt4 book ai didi

Django:从缓存本地过滤查询集

转载 作者:行者123 更新时间:2023-12-03 23:30:23 25 4
gpt4 key购买 nike

如果我执行 prefetch_related('toppings')对于查询集,我想稍后 filter(spicy=True)通过相关表中的字段,Django 会忽略缓存的信息并执行数据库查询。我发现这是documented (在注释框下)并且似乎发生在所有形式的缓存( select_related() ,已经评估的查询集等)中,当另一个 filter()被执行。

但是,是否有某种 super secret 隐藏的省时快捷方式可以在本地过滤(使用缓存而不是访问数据库)而无需编写 python 代码来循环查询集(使用列表/字典理解等)?也许像 filter_locally(spicy=True) ?

编辑:

列表/理解对我来说不起作用的原因之一是因为列表/字典没有查询集方法。就我而言,第一级 M2M 字段,toppings , 不是我的最终目标,我需要检查第二个相关的 M2M 字段(我也已经预取了)。虽然这也可以使用列表理解来实现,但使用诸如 filter_locally(spicy=True, origin__country='Spain') 之类的东西要简单得多。因为:

  • 它允许以最少的努力访问多个级别的相关字段
  • 它允许链接其他查询集方法
  • 它更容易阅读,因为它与熟悉的 filter() 一致
  • 使用 filter() 更容易修改现有代码无需预取即可添加此优化,而无需进行太多更改。

  • 但是从回复来看,Django 没有这样的支持:(

    最佳答案

    您必须编写 python 代码来遍历查询集(列表/字典理解是理想的)。所有 filter()代码知道如何做的是向发送到数据库的SQL 添加过滤语言。本地过滤与远程过滤是一个完全不同的问题,因此这两个不同问题的解决方案将无法共享任何逻辑。

    不过,单行列表理解非常简单;语法可能不会比 filter() 复杂得多.

    关于Django:从缓存本地过滤查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19776189/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com