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

标签 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 = 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)。我可以用一个查询来做到这一点吗?

最佳答案

(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])

关于Django,使用其他表中的数据进行注释和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15743766/

相关文章:

python - Django模板: Exclude request.用户显示用户列表

python - 从 Google Cloud Storage 中删除文件

python - django登录到上一页

python - Django,如何使用名字和姓氏对用户进行身份验证?

python - 这是将两个字典的字典合并在一起并对相似值求和的最佳方法吗

python - Django迁移ForeignKey到IntegerField不丢数据的迁移策略

python - Python/GAE社交网络/CMS?

python - Celery 从 Django 模块内部记录到文件

python - 如何在 Django 中查询为 GROUP BY?

python - 动态创建ImageField Django