djangoORM怎么获取数据在数据集中的排名?

发布于 2022-09-11 20:31:58 字数 824 浏览 16 评论 0

我有一个数据表

class Currency(models.Model):
    agent = models.OneToOneField('users.Agent', on_delete=models.CASCADE)
    consume_total = models.DecimalField(max_digits=10, decimal_places=2, help_text='个人销售额')
    class Meta:
        ordering = ['-consume_total']

我需要在视图里返回 用户的排名,排名是根据consume_total 这个字段的值进行排。

1,获取当前登录用户排在第几名

2,获取排名的前10名

3,获取当前用户排名的前5名和他之后的5名
这种应该怎么写?

class MyRank(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        user = request.user
        res_data = {}
        count = Currency.objects.count()
        res_data['people_count'] = count  # 总人数
        #  获取当前用户排在第几名
        
        #  获取排名前10名
        
        #  获取当前用户排名的前5名和他之后的5名
        
        return Response(data=res_data)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

向日葵 2022-09-18 20:31:58

假设consume_total不重复

获取当前用户排在第几名

# 先获取当前用户的销售额
consume = Currency.objects.get(agent=user).consume_total
# 筛选出所有高于此销售额的数据,取一下count就是当前用户的排名
rank = Currency.objects.filter(consume_total__gt=consume).count()

排名的前十名

# 按照consume_total 降序排序 然后取前10个
Currency.objects.order_by('-consume_total').values_list('agent', flat=True)[:10]

获取当前用户排名的前5名和之后的5名

# 当前用户排名的前5名
consume = Currency.objects.get(agent=user).consume_total
Currency.objects.filter(consume_total__gt=consume).order_by('consume_total')[:5]
# 当前用户排名的后5名
Currency.objects.filter(consume_total__lt=consume).order_by('-consume_total')[:5]

如果有重复的 就看你怎么处理重复销售额的排名了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文