在我的应用中,有些用户请求捐赠这些项目的项目和用户。我想获取捐款最多的所有用户。
这些是我的模特:
class ItemRequest(models.Model):
item_type = models.ForeignKey(ItemType)
description = models.CharField(max_length=1024, default='', blank=True)
quantity = models.IntegerField()
user = models.ForeignKey(User)
completed = models.BooleanField(default=False)
completed_dt = models.DateTimeField()
class Donation(models.Model):
item_request = models.ForeignKey(ItemRequest, related_name='donation')
user = models.ForeignKey(User, related_name='donor')
quantity_offered = models.IntegerField(default=0)
quantity_accepted = models.IntegerField(default=0)
更具体地说,我想获得捐款最多的前5名捐赠者(item_request.completed=True)
。我可以用一个查询来做这个吗?
答案 0 :(得分:1)
(User.objects
.filter(donor__item_request__completed=True)
.annotate(c=Count('donor'))
.order_by('-c')[:5])
您也应该为Donation.user.related_name
donation
命名。
然后它将是
(User.objects
.filter(donation__item_request__completed=True)
.annotate(c=Count('donation'))
.order_by('-c')[:5])
答案 1 :(得分:0)
Donation \
.objects \
.select_related('item_request', 'user') \
.filter(item_request__completed=True) \
.annotate(num_donations=models.Count('item_request')) \
.filter(num_donations__gt=0) \
.order_by("-num_domations")[:5]