Django高效查找:相关管理器与整个查询集

时间:2016-05-23 08:03:34

标签: django

我们说我有以下Django模型:

class X(models.Model):
    some_field = models.FloatField()


class Y(models.Model):
    x = models.ForeignKey(X)
    another_field = models.DateField()

让我们说我正在寻找具有特定日期(lookup_date)的y的特定实例,属于某个x。如果有的话,哪个选项更有效?:

1。 Y.objects.get(x = x,another_field = lookup_date)

或使用相关经理:

2。 x.y_set.get(another_field = lookup_date)

1 个答案:

答案 0 :(得分:2)

您可能会发现它们生成相同的查询,您可以通过在查询末尾添加.query来检查,这将显示生成的sql。

Y.objects.get(x=x, another_field=lookup_date).query
x.y_set.get(another_field=lookup_date).query

但无论哪种方式,这都是微观优化,您可能会发现阅读Eric Lippert's performance rant很有意思。

  

其中一个被认为是更加pythonic?

不是真的,我倾向于使用第二种,因为它可以使它更容易符合pep8的线长标准