对于下面的示例架构
# 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