1
class Blog(models.Model):
    name = models.CharField(max_length=200)
    rating = models.IntegerField()
    country = models.CharField(max_length=50)

有两个TOP:

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

我需要在每个评级中提供位置。

数据库中的博客:

  • 博客(名称='Python',等级=100,国家='俄罗斯')
  • 博客(名称='Django',等级=10,国家='俄罗斯')
  • 博客(name='Programming', rating=5, country='France')
  • 博客(名称='Stackoverflow',评级=9,国家/地区='拉脱维亚')

世界排名第一:

  1. 博客(名称='Python',等级=100,国家='俄罗斯')
  2. 博客(名称='Django',等级=10,国家='俄罗斯')
  3. 博客(名称='Stackoverflow',评级=9,国家/地区='拉脱维亚')
  4. 博客(name='Programming', rating=5, country='France')

俄罗斯国家评分最高:

  1. 博客(名称='Python',等级=100,国家='俄罗斯')
  2. 博客(名称='Django',等级=10,国家='俄罗斯')

如何根据评分获得博客的位置?

更新:

我应该能够这样做:

Blog.objects.get(pk=1).world_position # output = 23
Blog.objects.get(pk=1).country_position # output = 14

因为使用 order_by('rating') 的简单迭代不适合。

4

1 回答 1

1

应该像这样简单

for i, blog in enumerate(Blog.objects.all().order_by('-rating')):
    i, blog 
Blog.objects.filter(country='Russia').order_by('-rating')

如果您有非常大的数据集,您可以查看 Raw Sql 以获取行号

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

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) 
于 2013-07-12T09:47:11.440 回答