class Blog(models.Model):
name = models.CharField(max_length=200)
rating = models.IntegerField()
country = models.CharField(max_length=50)
有两个TOP:
我需要在每个评级中提供位置。 F.e。
db中的博客:
世界排名最高:
按国家/地区评分最高的俄罗斯:
如何根据评分获得博客的位置?
更新
我应该能够这样想:
Blog.objects.get(pk=1).world_position # output = 23
Blog.objects.get(pk=1).country_position # output = 14
因为使用order_by('rating')的简单迭代不适合。
答案 0 :(得分: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来获取rownumber,或者你可以找到一种方法来存储基于博客对象评级的排名。
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)