У меня проблема с оптимизацией предварительной выборки свойств модели. Но давайте сначала начнем с кода, который облегчает объяснение моей проблемы:
class Tournament(models.Model):
name = models.CharField(...)
@property
def active_teams(self):
return self.teams.exclude(state=TeamStateTypes.inactive)
@property
def total_count_teams(self):
return self.active_teams.count()
class Team(models.Model):
tournament = models.ForeignKey(
Tournament, ...
related_name='teams'
)
Моя проблема в том, что у меня есть несколько таких counts
, как total_count_teams
. Когда запрос получает Tournament
, это приводит ко многим запросам SQL, что делает его медленным.
Чтобы повысить производительность, я попытался prefetch
, но запросы SELECT COUNT(*)
все еще сохраняются.
Tournament.objects.all().prefetch_related('teams')
Эта идея вообще осуществима или как мне оптимизировать / сделать это?