在Django中链接反向外键查找的最佳方法

时间:2018-04-09 11:00:22

标签: python django

我们有一个类似于此的数据库模型,其中每个箭头表示箭头方向上的多对一关系:

A - > B - > C - > D< - E

对于大多数模型,我们有一个名为D的属性。对于C,该方法返回D。对于B,该方法会调用C.D(),依此类推。这些我们可以用于FK查找。

反向查找出现问题,因为生成SQL语句时这些链式属性不可用,这意味着我们必须将整个QuerySet加载到内存中以过滤这些属性。理想情况下,我们可以执行A.objects.filter(D=someD)

之类的操作

我们所做的是基于关系查找并链接一堆连接。一个连接的语法很好,但很快就难以维护。

如果我们想要将所有A个对象(间接)与D相关联,我们必须A.objects.filter(B__C__D=someD)。必须在多个地方编写这样的代码显然并不理想。

我们已经为每个模型调查了F注释和自定义管理器,但没有太多运气。

TLDR:链接反向查找的最佳方法是什么?

提前致谢!

0 个答案:

没有答案