首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:如何根据it的评级获得进入位置

Django:如何根据it的评级获得进入位置
EN

Stack Overflow用户
提问于 2013-07-12 09:37:52
回答 1查看 431关注 0票数 1
代码语言:javascript
复制
class Blog(models.Model):
    name = models.CharField(max_length=200)
    rating = models.IntegerField()
    country = models.CharField(max_length=50)

有两顶:

  • 按世界评级
  • 按国家评级

我需要在每个评级中提供职位。F.e.

数据库中的博客:

  • 博客(名称=‘Python’,rating=100,country=‘俄罗斯’)
  • 博客(名称=‘Django’,rating=10,country=‘俄罗斯’)
  • 博客(name=‘Programming’,rating=5,country='France')
  • 博客(名称=‘Stackoverflow’,rating=9,country=‘拉脱维亚’)

世界排名第一:

  1. 博客(名称=‘Python’,rating=100,country=‘俄罗斯’)
  2. 博客(名称=‘Django’,rating=10,country=‘俄罗斯’)
  3. 博客(名称=‘Stackoverflow’,rating=9,country=‘拉脱维亚’)
  4. 博客(name=‘Programming’,rating=5,country='France')

按俄罗斯国家分列的最高评级:

  1. 博客(名称=‘Python’,rating=100,country=‘俄罗斯’)
  2. 博客(名称=‘Django’,rating=10,country=‘俄罗斯’)

我怎样才能得到博客的地位,根据评级?

更新:

我应该能做一些这样的思考:

代码语言:javascript
复制
Blog.objects.get(pk=1).world_position # output = 23
Blog.objects.get(pk=1).country_position # output = 14

因为使用order_by进行简单的迭代(“评级”)并不合适。

EN

回答 1

Stack Overflow用户

发布于 2013-07-12 09:47:11

应该像这样简单

代码语言:javascript
复制
for i, blog in enumerate(Blog.objects.all().order_by('-rating')):
    i, blog 
Blog.objects.filter(country='Russia').order_by('-rating')

如果有非常大的数据集,可以查看原始Sql以获得行号。

更新:虽然这对于大型数据集并不有效,您应该考虑使用原始SQL获取行号,或者您可以找到一种方法来根据博客对象的评级来存储排名。

代码语言:javascript
复制
class Blog(models.Model):
    name = models.CharField(max_length=200)
    rating = models.IntegerField()
    country = models.CharField(max_length=50)

    @property
    def world_position(self):
        ids = list(Blog.objects.all().order_by('-rating').values_list('id', flat=True))
        return ids.index(self.id) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17611883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档