Как я могу объединить эти два аннотированных запроса Django в один?

у меня есть два запроса:

class Users(models.Model):

name = models.CharField(max_length=50, unique=True)

class Comments(models.Model):

user_field = models.ForeignKey(Users,on_delete=models.PROTECT,db_index=True, to_field='name')
likedislike = models.SmallIntegerField(db_index=True)

bb1 = Users.objects.filter(comments__likedislike__gt=0).annotate(likes=Sum('comments__likedislike'))

bb2 = Users.objects.filter(comments__likedislike__lt=0).annotate(dislikes=Sum('comments__likedislike'))

как их совместить?

Вы можете передать фильтр в Sum, чтобы ограничить, какие значения используются, тогда вы можете иметь две отфильтрованные аннотации в одном запросе

from django.db.models import Sum, Q
Users.objects.annotate(
    likes=Sum('comments__likedislike', filter=Q(comments__likedislike__gt=0)),
    dislikes=Sum('comments__likedislike', filter=Q(comments__likedislike__lt=0))
)
Вернуться на верх