我正在研究一个有一些复杂关系的系统,我正试图找到一种有效的方法来过滤一些数据。
假设我有以下关系:
model C
- FK - > model B
- FK - > model A
model C
- FK - > model R
- FK - > model T
- FK - > model Z
鉴于model A
的实例,如何才能将所有Z
与之关联?
一种方法(我认为有效 - 但效率不高)如下:
class A(models.Model):
@property
def get_related_Zs(self):
Cs = models.C.objects.filter(B__A=self)
Zs = models.Z.objects.filter(R__T__Z__in=Cs).distinct()
return Zs
也许这是最好的方法(我对此表示怀疑)。有什么想法可以更有效地实现这个目标吗?
答案 0 :(得分:3)
那是:
class A(models.Model):
@property
def get_related_Ts(self):
Ts = T.objects.filter( R__C__B__A = self ).distinct()
return Ts
解释:简单的方法是从您需要的模型T
开始。然后,您可以通过关系导航到A
。 django query api会将它转换为数据库后端的SQL连接。
注意:请记住,在执行句子之前,数据库中应该存在模型。