Даны две модели:Получение N связанных моделей данные модели M
class Post(models.Model):
...
class Comment(models.Model):
post = models.ForeignKey(Post)
...
Есть хороший способ получить последние 3 Комментарии к набору сообщений (то есть в одном туда и обратно в БД, а не один раз в после)? Наивный реализация, чтобы показать, что я имею в виду:
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'}]
[This] (http://stackoverflow.com/questions/3080326/django-return-one-filtered-object-per-foreign-key) не дает мне большой надежды, что это легко сделать через ОРМ. – bismark