django - 根据多个字段的最大值对 Django 模型进行排序
问题描述
我有一个为团队存储数据的模型。对于每场比赛(比赛 1、比赛 2 等),每支球队都有三个存储点值的字段。我需要能够根据三场比赛中的任何一场比赛中的最高分对这些球队进行排序,但 Django 的 order_by 方法仅根据一个值的最大值进行排序。有没有办法让我提供多个参数并让它在排序时选择最大值?这是我的代码到目前为止的样子:
#models.py
class Team(models.Model):
match1 = models.CharField(max_length=4, blank=True, default="/")
match2 = models.CharField(max_length=4, blank=True, default="/")
match3 = models.CharField(max_length=4, blank=True, default="/")
#views.py
def team_rankings(request): # Scoreboard/rankings of teams
context = {
'teams': Team.Objects.all().order_by(#All three match results here)
}
return render(request, 'scoring_system/rankings.html', context)
解决方案
您可以向您添加一个函数,该函数class Team
返回这些匹配项的最大值,例如:
#models.py
class Team(models.Model):
match1 = models.CharField(max_length=4, blank=True, default="/")
match2 = models.CharField(max_length=4, blank=True, default="/")
match3 = models.CharField(max_length=4, blank=True, default="/")
def highest(self):
# Compares self.match1, self.match2, self.match3 and returns highest
然后,您可以使用以下方法对它们进行排序:
#views.py
def team_rankings(request): # Scoreboard/rankings of teams
context = {
'teams': sorted( Team.objects.all(), key=lambda x: x.highest() )
}
return render(request, 'scoring_system/rankings.html', context)
推荐阅读
- javascript - 如何在 vue 中使用下载属性?
- javascript - 如何为文本字段实现正则表达式以在 Extjs 中一次允许一个逗号一个空格
- python - Pandas CSV 导入中二进制变量的最佳数据类型以减少内存使用
- c - 并发线程和数据竞争
- java - Draw on Android's surfaceView
- testng - 如何在循环中多次运行具有许多测试方法的 testng 类文件
- c# - c# 后面的代码中绑定了不正确的数据
- logstash - Logstash 对 Crate DB 的支持
- tsql - How to correct this if exists query?
- yarnpkg - 运行`react-scripts`时如何查找依赖项