Hi,
I got a lot of duplicated queries (in django debug toolbag) when i load my
menu tabs , actually it's normal because i don't understand how to use
database optimization for this, if possible i want some advice to make my
reflexion better on this.
Models(simplify) :
class Categorie(models.Model):
nom = models.CharField(max_length=30)
slug = models.SlugField(max_length=100)
visible = models.BooleanField("Visible",default = False)
def getscateg(self):
return self.souscategorie_set.all().filter(visible = True)
class SousCategorie(models.Model):
nom = models.CharField(max_length=30)
slug = models.SlugField(max_length=100)
visible = models.BooleanField("Visible",default = False)
def gettheme(self):
return self.theme_set.all().filter(visible = True)
class Theme(models.Model):
nom = models.CharField(max_length=100)
slug = models.SlugField(max_length=100)
visible = models.BooleanField("Visible",default = False)
def getstheme(self): # Récupère les thèmes en fonction de la sous-categ
traité
return self.soustheme_set.all().filter(visible=True)
class SousTheme(models.Model):
nom = models.CharField(max_length=100)
slug = models.SlugField(max_length=100)
visible = models.BooleanField("Visible",default = False)
views :
def page(request):
categs = Categorie.objects.filter(visible=True)
return render(request, 'page.html', locals())
templates (simplify) :
{% for categ in categs %}
{% with currscat=categ.getscateg %}
<li class = "{% if currscat %} has_menu {% endif %}"> {{categ.nom}} #
This line hit database
{% if currscat %} # This line hit database
<ul class = "menu-1">
{% for souscateg in currscat %}
{% with currth=souscateg.gettheme %}
<li class="{%if currth%} has_menu {%endif%}">
{{souscateg.nom}} #This line hit database
{% if currth %} # this line hit database
<ul class = "menu-2">
..........
</ul>
{% endif %}
</li>
{% endwith %}
{% endfor %}
</ul>
{% endif %}
</li>
{% endwith %}
{% endfor %}
I think prefetch_related can help me here but i don't find to reduce
resquest to database with it in this case... So after my template rendered
i got like 50 request including 40 duplicate...
i have try something like this in my views but without success, that just
add more request to database :
categs =
Categorie.objects.filter(visible=True).prefetch_related('souscategorie_set__theme_set__soustheme_set')
Thanks for your help.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/2cb84db9-34ee-4dee-996d-4199a8eb8773%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.