让我们定义这些模型:
class Family(models.Model):
.....
class Person(models.Model):
family = models.ForeignKey(Family)
.....
假设我们有 family_object 这是任何Family实例,所以我们可以通过两种方式找到这个家庭的人:
a) Person.objects.filter(family=family_object)
b) Person.objects.filter(family__id=family_object.id)
哪个更有效率?这种情况有什么规则吗?
答案 0 :(得分:0)
一些测试显示它们生成相同的数据库查询:
q1 = str(Person.objects.filter(family=family_object).query)
q2 = str(Person.objects.filter(family__id=family_object.id).query)
q3 = str(Person.objects.filter(family_id=family_object.id).query)
q1 == q2 == q3
通过ORM从django对象中拉出id的开销应该非常小。
我实际上有点惊讶..我认为__
将是一个加入,而family=family_object
将没有加入。两者都不与django 1.6产生联接。
Django知道PK上的__id
查找并跳过了连接。凉。