Сортировка моделей Django по максимальному значению нескольких полей - PullRequest
1 голос
/ 08 ноября 2019

У меня есть модель, которая хранит данные для команд. Каждая команда имеет три поля для каждого сыгранного матча (матч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)

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете добавить к вашему 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...