【发布时间】:2023-03-12 18:43:01
【问题描述】:
对于以下示例架构
# 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\')
我想达到什么目的?
好吧,我正在尝试找到一种方法,能够以某种方式编写一个查询集,该查询集的功能与上述原始查询的功能相同。到目前为止,我能够通过编写两个查询集来做到这一点,并使用一个查询集的结果,然后使用我编写的第二个查询集来获取最终的数据库记录。然而,这对 DB 来说是 2 次命中,我想通过在一次 DB 命中中完成所有操作来优化它。
这种原始查询的查询集是什么?还是有更好的方法?
以上代码在这里https://dpaste.org/DZg2
【问题讨论】:
标签: django postgresql django-models django-views django-queryset