Django按最大属性值排序对象
我正在创建一个应用程序,用来记录田径比赛的成绩和积分。最后,我想在屏幕上显示各个队伍(也叫“房子”)、他们的积分和总排名。积分最高的队伍将排在第一名,依此类推……
我的模型里有一个字段叫 points
,这个字段会随着比赛结果的记录而更新。我希望这个模型能够自动根据其他队伍的积分来确定自己的排名。我该怎么做呢?
这是我的代码:
models.py
class House(models.Model):
name = models.CharField(max_length=255)
points = models.FloatField(default=0, null=False)
house_color = models.CharField(max_length=10, null=False, blank=False, default='red')
position = models.IntegerField(default=4)
def determine_position(self):
all_houses_queryset = self.objects.all()
我试着在模板中获取一个有序查询集的索引,但出现了一个值错误。
Views.py
def dashboard(request):
ordered_houses = House.objects.all().order_by('-points').values()
context = {
'houses': ordered_houses,
'range': [1,2,3,4],
}
return render(request, 'core/index.html', context)
index.html
{% for index, house in houses %}
1 个回答
1
只需列出这些项目:
def dashboard(request):
ordered_houses = enumerate(House.objects.order_by('-points'), 1)
return render(request, 'core/index.html', {'houses': ordered_houses})
然后进行处理:
{% for index, house in houses %}
<!-- … -->
{% endfor %}
请不要使用值,这是一种被称为 原始痴迷的反模式 [refactoring.guru],这样会妨碍在模板中展示逻辑,并且会影响像 ForeignKey
这样的关系。