django - How to reduce DB queries? -


models:

class technology(models.model):     name = models.charfield(max_length=100, unique=true)     slug = models.slugfield(max_length=100, unique=true)  class site(models.model):     name = models.charfield(max_length=100, unique=true)     slug = models.slugfield(max_length=100, unique=true)     technology = models.manytomanyfield(technology, blank=true, null=true) 

views:

def portfolio(request, page=1):     sites_list = site.objects.select_related('technology').only('technology__name', 'name', 'slug',)     return render_to_response('portfolio.html', {'sites':sites_list,}, context_instance=requestcontext(request)) 

template:

{% site in sites %} <div>     {{ site.name }},     {% tech in site.technology.all %}         {{ tech.name }}     {% endfor %} </div> {% endfor %} 

but in example each site makes 1 additional query technology list. there way make in 1 query somehow?

what looking efficient way reverse foreign-key lookups. generic approach is:

qs = myrelatedobject.objects.all() obj_dict = dict([(obj.id, obj) obj in qs]) objects = myobject.objects.filter(myrelatedobj__in=qs) relation_dict = {} obj in objects:     relation_dict.setdefault(obj.myobject_id, []).append(obj) id, related_items in relation_dict.items():     obj_dict[id].related_items = related_items 

i wrote blogpost while ago, can find more info here: http://bit.ly/ge59d2


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -