python - Does a django query save its result after it's been called? -
i'm trying determine whether or not simple caching trick useful. know django querysets lazy improve efficiency, i'm wondering if save result of query after data has been called.
for instance, if have 2 models:
class klass1(models.model): k2 = models.foreignkey('klass2') class klass2(models.model): # model code ... @property def klasses(self): self.klasses = klass1.objects.filter(k2=self) return self.klasses and call klass_2_instance.klasses[:] somewhere, database accessed , returns query. i'm wondering if call klass_2_instance.klasses again, database accessed second time, or django query save result first call?
django not cache you.
instead of klass1.objects.filter(k2=self), self.klass1_set.all(). because django create set in many side of 1-n relations.
i guess kind of cache complicated because should remember filters, excludes , order_by used. although done using designed hash, should @ least have parameter disable cache.
if cache, do:
class klass2(models.model): def __init__(self, *args, **kwargs): self._klass1_cache = none super(klass2, self).__init__(*args, **kwargs) def klasses(self): if self._klass1_cache none: # here can't remove list(..) because forcing query execution once. self._klass1_cache = list(self.klass1_set.all()) return self._klass1_cache
this useful when loop many times in related objects. me happens in template, when need loop more 1 time.
Comments
Post a Comment