Подзапрос в Django ORM
У меня есть следующие модели. Моя цель - извлечь 2 последних комментария из каждого сообщения. Возможно ли это?
class Post(models.Model):
author = models.ForeignKey(Author, related_name="posts", on_delete=models.CASCADE)
title = models.CharField(max_length=256)
text = models.TextField(blank=True, default="")
created_at = models.DateTimeField(default=datetime.now, blank=True)
@property
def comments_number(self):
return self.comments.count()
def __str__(self, *args, **kwargs):
return f"{self.title}"
class Comment(models.Model):
post = models.ForeignKey(Post, related_name="comments", on_delete=models.CASCADE)
author = models.ForeignKey(Author, related_name="comment", on_delete=models.CASCADE)
text = models.TextField()
created_at = models.DateTimeField(default=datetime.now, blank=True)
Ближайшая попытка, которая у меня есть, вот эта:
newest = Comment.objects.filter(post=OuterRef('pk')).order_by('-created_at')
recent_comments = Post.objects.annotate(newest_comments=Subquery(newest.values('text')[:2]))
А когда я вызываю recent_comments.values_list()
, я могу видеть новейший один комментарий на Post obj (только один), но это не то, что я хочу. Я потратил много времени на это, ребята, и ничего не понял...