Django,使用其他表中的数据进行注释和排序

Django,使用其他表中的数据进行注释和排序,django,django-models,Django,Django Models,在我的应用程序中,有请求物品的用户和捐赠物品的用户。我想找到所有捐款最多的用户 这些是我的模型: class ItemRequest(models.Model): item_type = models.ForeignKey(ItemType) description = models.CharField(max_length=1024, default='', blank=True) quantity = models.IntegerField() user =

在我的应用程序中,有请求物品的用户和捐赠物品的用户。我想找到所有捐款最多的用户

这些是我的模型:

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\u request.completed=True)
。我可以用一个查询来完成吗

(User.objects
       .filter(donor__item_request__completed=True)
       .annotate(c=Count('donor'))
       .order_by('-c')[:5])
您可能也应该命名您的
捐赠.user.related_name
捐赠

那就是

(User.objects
       .filter(donation__item_request__completed=True)
       .annotate(c=Count('donation'))
       .order_by('-c')[:5])
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]