Django: как отсортировать класс по дорогостоящему для вычисления свойству и сделать результаты постоянными?
Каков наилучший способ отсортировать элементы модели по дорогостоящему значению свойства и убедиться, что значения свойств сохраняются в течение многих итераций запрос / ответ? Я мог бы попробовать что-то вроде:
class Player(models.Model):
name = models.CharField(max_length=100)
@classmethod
def sorted_by_player_scores(cls, league):
'would be very nice to be able to use a simple query here'
from operator import itemgetter
try:
return sorted(cls.player_score_list, key=itemgetter(1), reverse=True)
except Attribute Error:
players = cls.objects.all()
for player in players:
player_score_list = []
try:
player_score_list.append((player, player.player_score))
except AttributeError:
league_player = LeaguePlayer(league, player)
player_score_list.append((player, league_player.player_score))
cls.player_score_list = player_score_list
return sorted(player_score_list, key=itemgetter(1), reverse=True)
class League(models.Model):
name = models.CharField(max_length=100)
league_size = models.IntegerField()
scoring_rules = ...
class LeaguePlayer():
def __init__(self, league, player):
self.league = league
self.player = player
@property # is cached_property usable/useful here?
def player_score(self):
self.player.player_score = very_expensive_calculation()
return self.player.player_score
def many_other_properties_and_methods_against_LeaguePlayers
Я чувствую, что моя проблема была бы распространенной проблемой django, но я не могу найти простое решение или даже какую-нибудь общую дискуссию о передовой практике. Я знаю, что мог сделать class LeaguePlayer()
модель Django, а не просто класс Python. Но я не хочу создавать / сохранять эти таблицы данных, когда значения, которые я сохраняю, очень легко переносятся @property
тег.