繁体   English   中英

Django在查询集中获取范围

[英]Django Get Range in Queryset

在我的Django应用程序中,我收集了一些模型,这些模型按它们完成动作的次数排序。 这是排行榜。 我希望人们使用我的应用程序查看他们所在的位置以及他们上方两个人和下方两个人的名字。 因此,我需要在该查询集中找到该用户的位置,然后在其上方和下方找到两个用户。 最有效的方法是什么? 我在画空白...

您可以使用score__ltscore__gt按得分过滤对象。

class Participant(models.Model):
    user = models.ForeignKey(User)
    score = models.IntegerField()

    def get_score_above_below(self, n):
        try:
            above = Participant.filter(score__lt=self.score).order_by('-score')[:n]
        except ObjectDoesNotExist:
            above = Participant.filter(score__lt=self.score).order_by('-score')
        try:
            below = Participant.filter(score__gt=self.score).order_by('-score')[:n]
        except ObjectDoesNotExist:
            below = Participant.filter(score__gt=self.score).order_by('-score')

        entries = list(above) + [self] + list(below)
        return [(part.user, part.score) for part in entries]

这将返回一个元组列表:

[('<username two places above>', score),
 ('<username one place above>', score),
 ('<instance username>', score),
 ('<username one place below>', score),
 ('<username two places below>', score)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM