У меня много дублированных запросов (в панели инструментов отладки django), когда я загружаю вкладки меню, я уверен, что могу это оптимизировать, но не могу найти хороший способ.Нужна консультация для дублированных запросов
Модели:
class Categorie(models.Model):
name = models.CharField(max_length=30)
visible = models.BooleanField(default = False)
def __str__(self):
return self.nom
def getscateg(self):
return self.souscategorie_set.all().filter(visible = True)
class SousCategorie(models.Model):
name = models.CharField(max_length=30)
visible = models.BooleanField(default = False)
categorie = models.ForeignKey('Categorie')
def __str__(self):
return self.name
def gettheme(self):
return self.theme_set.all().filter(visible = True)
class Theme(models.Model):
name = models.CharField(max_length=100)
visible = models.BooleanField(default = False)
souscategorie = models.ForeignKey('SousCategorie')
def __str__(self):
return self.name
Просмотров:
def page(request):
categs = Categorie.objects.filter(visible = True)
return render(request, 'page.html', locals())
Шаблоны:
{% for categ in categs %}
<li>
{{categ.name}}
<ul>
{% for scateg in categ.getscateg %}
<li>
{{scateg.name}}
<ul>
{% for theme in scateg.gettheme %}
<li>{{ theme.name }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
У меня есть вид на prefetch_related, но только работать, если я хочу загрузить Категория из SousCategorie и SousCategorie из темы , поэтому, если я понимаю, мне нужно обратное ...
Спасибо за ваш ответ, на самом деле ваше предложение не работает для меня получил эту ошибку: не удается разрешить ключевое слово 'souscategorie_set' в поле. Я пытаюсь найти способ с этим подходом. Фактически в django-debug-toolbar я получил 97 дубликатов для 105 запросов, но большинство из них берут 0 мс для выполнения, поэтому никакого влияния на загрузку страницы, я думаю, что я должен опубликовать свой реальный шаблон и журнал запросов, чтобы разоблачить мою проблему. – V1ce
Я использовал информацию, которую вы указали в своем вопросе, если вы получили эту ошибку, имя неверно, посмотрите на странице о [связанных объектах] (https://docs.djangoproject.com/en/1.8/реф/модели/отношения /). 105 запросов действительно плохо, даже если он работает с 0ms сейчас, вы должны попытаться его исправить. Кроме того, я рекомендую прочитать [документы об оптимизации] (https://docs.djangoproject.com/en/1.8/topics/db/optimization/) –