我有两个这样的模型:
class Item(models.Model):
title = models.CharField(max_length=128)
class Order(models.Model):
item = models.ForeignKey(Item)
user = models.ForeignKey('users.User',null=True)
gift_code = models.CharField(max_length=20,default='')
我需要注释两个不同的查询:
Order.objects.filter(gift_code__isnull=False, gift_code__gt='').values('item__title').annotate(the_count=Count('item__title'))
Order.objects.filter(gift_code__isnull=False, gift_code__gt='', user__isnull=False).values('item__title').annotate(the_count=Count('item__title'))
问题是我找不到合并这两个查询的方法。
我试过这个方法,但两个值都是一样的:
all_gift = Count('item__title')
used_gift = Count('item__title', filter=Q(user__isnull=False))
gifts = Order.objects.filter(gift_code__isnull=False, gift_code__gt='').values('item__title').annotate(all_gift=all_gift).annotate(used_gift=used_gift)
实际输出:
[{'item__title': 'title', 'used_gift': 500, 'all_gift': 500},...]
我的预期输出是:
[{'item__title': 'title', 'used_gift': 60, 'all_gift': 500},...]
答案 0 :(得分:0)
您可以在distinct
:
Count()
参数
used_gift = Count('item__title', filter=Q(user__isnull=False), distinct=True)
这样就可以消除其他注释造成的重复,并返回预期的60个礼物。