我有三个模特
class Business(models.Model):
name = models.CharField(max_length=30)
...
class Dude(models.Model):
...
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude)
date = models.DatetimeField()
business = models.ForeignKey(Business)
我想知道每个男人的最后3个电话号码,这就是我实现它的方法
^{2}$但它对每个人至少两次访问数据库并消耗大量cpu。在
使用django orm获得相同响应的最有效方法是什么?在
旁白:我有3000万个电话号码和170个伙计。在
在这种情况下,首先尝试的是一个
select_related
来获取每个男人的电话号码。在(注意您正在查询的另一个对象上的
select_related
,phone_number.business
)在本例中,如果每个
Dude
有很多phone_number
,那么它的性能可能比原始查询差,因为它将获取哥们,电话号码. 在不幸的是,正如评论所建议的那样,没有ORM方法来限制
select_related
。您需要编写一些SQL。您可以通过观察sqldjango为select相关查询生成了什么,方法是打开DB kogging,然后运行自己的custom SQL query。在相关问题 更多 >
编程相关推荐