VoucherInfoByVoucherCodeLoader 数据加载器使用 prefetch_related
作者: maarcingebala创建于 2023年8月21日更新于 2026年8月1日
标签performancehelp wanted
在准备 修复 Avatax 逻辑 过程中,我们需要对凭证和它们的数据加载器进行一些更改。我们引入了一个数据加载器,用于获取 VoucherInfo 数据类,该类存储了凭证对象以及凭证适用的所有对象的主键。 折扣金额的计算逻辑嵌入在 Voucher 模型中。它假设 voucher.channel_listings 已经预先加载,并调用 voucher.channel_listings.all()。这会导致对未预先加载的凭证进行额外的 DB 查询。暂时我们在 VoucherInfoByVoucherCodeLoader 中添加了 prefetch_related("channel_listings") 来减少 DB 查询的数量,但我们需要更改这种方法,并引入一个单独的数据加载器,用于获取凭证的渠道列表数据。这还需要重新构建我们目前处理凭证的方式(计算在模型的逻辑中进行)。从 Voucher 模型中提取逻辑是实现这一点的最佳方式,并将其扩展以接受已预先加载的 channel_listings。
内容来源: saleor/saleor