django 查询集上的多个连接

时间:2020-12-25 06:55:38

标签: django postgresql django-models django-views django-queryset

对于下面的示例架构

    # schema sameple
    
    class A(models.Model):
        n = models.ForeignKey(N, on_delete=models.CASCADE)
        d = models.ForeignKey(D, on_delete=models.PROTECT)
    
    class N(models.Model):
        id = models.AutoField(primary_key=True, editable=False)
        d = models.ForeignKey(D, on_delete=models.PROTECT)
    
    class D(models.Model):
        dsid = models.CharField(max_length=255, primary_key=True)
    
    class P(models.Model):
        id = models.AutoField(primary_key=True, editable=False)
        name = models.CharField(max_length=255)
        n = models.ForeignKey(N, on_delete=models.CASCADE)
    
    # raw query for the result I want
    
    # SELECT P.name
    # FROM P, N, A
    # WHERE (P.n_id = N.id
    #     AND A.n_id = N.id
    #     AND A.d_id = \'MY_DSID\'
    #     AND P.name = \'MY_NAME\')

我想达到什么目的?

嗯,我正试图找到一种方法,能够编写一个与上述原始查询相同的查询集。到目前为止,我能够通过编写两个查询集来做到这一点,并使用一个查询集的结果,然后使用我编写的第二个查询集来获取最终的数据库记录。然而,这是对数据库的 2 次命中,我想通过在一次数据库命中中完成所有操作来优化它。

这种原始查询的查询集是什么?或者有更好的方法吗?

上面的代码在这里https://dpaste.org/DZg2

0 个答案:

没有答案