Django按最大属性值排序对象

1 投票
1 回答
21 浏览
提问于 2025-04-14 17:44

我正在创建一个应用程序,用来记录田径比赛的成绩和积分。最后,我想在屏幕上显示各个队伍(也叫“房子”)、他们的积分和总排名。积分最高的队伍将排在第一名,依此类推……

我的模型里有一个字段叫 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 这样的关系。

撰写回答