Впервые на Django, третий вопрос сегодня ...
У меня определены следующие (упрощенные) модели:
class Band(models.Model):
bandname = models.CharField('Band name', max_length=300)
class Release(models.Model):
title = models.CharField(max_length=300)
artist = models.ManyToManyField('Band')
formats = models.ManyToManyField('Format')
class Format(models.Model):
kind = models.CharField(max_length=300)
class Song(models.Model):
title = models.CharField(max_length=500)
release = models.ForeignKey('Release')
(я удалил дополнительные поля для удобства чтения)
Теперь, когда я пытаюсь выполнить следующий запрос, он добавляет на страницу сотни дополнительных запросов:
s = Song.objects.all() # adds 367 queries
Я пытался изменить это на:
s = Song.objects.select_related('band', 'release').all() # adds 245 queries
Это все еще отстой, и я не знаю, что еще я могу сделать. В моей базе 122 песни, в 52 релизах 39 групп. Не уверен, поможет ли это, но я в растерянности.
Какие-нибудь советы о том, как это оптимизировать? Мне нужно показать группу и название релиза для каждого Song
. A Release
- это ManyToMany для Band
, поскольку некоторые из них являются сплит-релизами нескольких артистов.
спасибо,
Matt