与えられた 2 つのモデル:
class Post(models.Model):
...
class Comment(models.Model):
post = models.ForeignKey(Post)
...
一連の投稿で最後の 3 つのコメントを取得する良い方法はありますか (つまり、投稿ごとに 1 回ではなく、DB への 1 回の往復で)。私が何を意味するかを示す単純な実装:
for post in Post.objects.filter(id__in=some_post_ids):
post.latest_comments = list(Comment.objects.filter(post=post).order_by('-id')[:3])
を指定するとsome_post_ids == [1, 2]
、上記は 3 つのクエリになります。
[{'sql': 'SELECT "myapp_post"."id" FROM "myapp_post" WHERE "myapp_post"."id" IN (1, 2)', 'time': '0.001'},
{'sql': 'SELECT "myapp_comment"."id", "myapp_comment"."post_id" FROM "myapp_comment" WHERE "myapp_comment"."post_id" = 1 LIMIT 3', 'time': '0.001'},
{'sql': 'SELECT "myapp_comment"."id", "myapp_comment"."post_id" FROM "myapp_comment" WHERE "myapp_comment"."post_id" = 2 LIMIT 3', 'time': '0.001'}]