我如何将这两个 Django 注释查询合并为一个?
How can i combine these two Django annotated queries into one?
我有两个问题:
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))
)
我有两个问题:
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))
)