我们有一个类似于此的数据库模型,其中每个箭头表示箭头方向上的多对一关系:
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:链接反向查找的最佳方法是什么?
提前致谢!