Hi, I try to reduce the number of db-queries in my app.
There is a model which changes almost never. It is like a "type of ticket" in a trouble ticket system. On one page there are seven SQL-Queries (SELECT .... FROM ticket_type where id=123) which of course always return the same result. I want to cache the objects: t1=TicketType.objects.get(id=123) t2=TicketType.objects.get(id=123) t1 and t2 should be the identical python object, not just objects containing the same data. Has someone done this before? Here is my first version: class ThreadLocalQueryset(models.query.QuerySet): _threadlocal=threading.local() _threadlocal.cache=dict() # The cache is at class-level. It survives a request. def get(self, **kwargs): kwargs_tuple=tuple(kwargs.items()) obj=self._threadlocal.cache.get(kwargs_tuple) if obj is not None: return obj obj=models.query.QuerySet.get(self, **kwargs) self._threadlocal.cache[kwargs_tuple]=obj return obj class ThreadLocalManager(models.Manager): use_for_related_fields = True def get_query_set(self): return ThreadLocalQueryset(self.model, using=self._db) class TicketType(models.Model): objects=ThreadLocalManager() If there would be many TicketTypes, the interpreter would use more and more memory, but there are few. Feedback welcome, Thomas Güttler -- Thomas Guettler, http://www.thomas-guettler.de/ E-Mail: guettli (*) thomas-guettler + de -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.