I have this model:
class Article(models.Model):
title = models.CharField(max_length=300, blank=False)
body = models.TextField(max_length=10000, blank=False)
created = models.DateTimeField(auto_now_add=True)
def last_post(self):
if self.post_set.count():
return self.post_set.order_by("-created")[0]
I have noticed that the last_post
creates a very costly and frequently run query. So I want to cache it for 5 minutes.
I know how to cache a queryset in views but last_post
bypasses views and is directly called in template. So appreciate your hints on how to cache it.
I suppose that you can use cached_property_with_ttl
from https://pypi.python.org/pypi/cached-property/1.2.0
from cached_property import cached_property_with_ttl
class Article(models.Model):
title = models.CharField(max_length=300, blank=False)
body = models.TextField(max_length=10000, blank=False)
created = models.DateTimeField(auto_now_add=True)
@cached_property_with_ttl(ttl=5)
def last_post(self):
if self.post_set.count():
return self.post_set.order_by("-created")[0]
Hope this will work for you.