Показать пост, чей комментарий имеет больше лайков, чем сам пост
В django я хочу показать несколько постов на главной странице с 1 или 2 комментариями.
Я хочу, чтобы показывались только те сообщения, чьи комментарии имеют больше лайков, чем лайков самого сообщения.
class Post:
    ...
    likes = models.ManyToManyField(User,...)
    ...
class Comment:
    ...
    post = models.ForeignKey(Post,...)
    likes = models.ManyToManyField(User,...)
    ...
                
Мы можем работать с аннотацией для подсчета количества лайков Post и комментариев к ней:
from django.db.models import Count, OuterRef, Subquery
comment_likes = Comment.likes.through.objects.filter(
    comment__post=OuterRef('pk')
).order_by().values('comment__post').annotate(
    c=Count('pk')
).values('c')
Post.objects.alias(
    num_likes=Count('likes')
).filter(
    num_likes__lt=Subquery(comment_likes)
)
В результате будет получен запрос, который выглядит следующим образом:
SELECT post.id
FROM post LEFT
OUTER JOIN post_likes ON post.id = post_likes.post_id
GROUP BY post.id HAVING COUNT(post_likes.customuser_id) < (
    SELECT COUNT(U0.id) AS c
    FROM comment_likes U0
    INNER JOIN comment U1 ON U0.comment_id = U1.id
    WHERE U1.post_id = post.id
    GROUP BY U1.post_id
)
Перед django-3.2 необходимо использовать .annotate(…) [Django-doc] вместо .alias(…) [Django-doc].