2

我正在研究一个具有一些复杂关系的系统,并且我正在尝试找到一种有效的方法来过滤一些数据。

假设我有以下关系:

model C- FK -> model B- FK ->model A

model C- FK -> model R- FK -> model T- FK ->model Z

给定一个实例,model A我怎样才能获得Z与之关联的所有 s ?

一种方法(我认为有效 - 但效率不高)如下:

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

也许这是最好的方法(我对此表示怀疑)。关于更有效的方法的任何想法?

4

1 回答 1

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 查询 api 会将其转换为您的数据库后端的 SQL 连接。

注意:记住模型应该在执行语句之前存在于数据库中。

于 2013-04-01T22:12:41.227 回答