當我加載我的菜單選項卡時,我有很多重複的查詢(在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從主題加載Categorie工作,所以如果我明白我需要與此相反......
謝謝您的回答,其實你的主張沒有爲我工作,我出現此錯誤:無法將關鍵字'souscategorie_set'解析爲字段。我嘗試用這種方法找到一種方法。其實在django調試工具欄我有105重複查詢105查詢,但他們大多數需要0ms執行,所以沒有影響在頁面加載,我想我應該發佈我的真實模板和查詢日誌揭露我的問題。 – V1ce
我使用了你在問題中給出的信息,如果你得到這個錯誤的名稱是錯誤的,請在頁面上看看[訪問相關對象](https://docs.djangoproject.com/en/1.8/REF /模型/關係/)。 105個查詢是非常糟糕的,即使它現在以0ms運行,您應該嘗試修復它。另外,我建議閱讀[關於優化的文檔](https://docs.djangoproject.com/en/1.8/topics/db/optimization/) –