如何在Django Orm中获取每个组的最新n个记录

2024-05-13 09:21:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个模特

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个伙计。在


Tags: 方法namedatemodelmodels电话号码businesslength
1条回答
网友
1楼 · 发布于 2024-05-13 09:21:25

在这种情况下,首先尝试的是一个select_related来获取每个男人的电话号码。在

dudes = Dude.objects.select_related('phone_number', 'phone_number__business').all()
for dude in dudes:
    do_the_thing()  

(注意您正在查询的另一个对象上的select_relatedphone_number.business

在本例中,如果每个Dude有很多phone_number,那么它的性能可能比原始查询差,因为它将获取哥们,电话号码. 在

不幸的是,正如评论所建议的那样,没有ORM方法来限制select_related。您需要编写一些SQL。您可以通过观察sqldjango为select相关查询生成了什么,方法是打开DB kogging,然后运行自己的custom SQL query。在

相关问题 更多 >