Extending appengine's db.Property with caching
Posted
by Noio
on Stack Overflow
See other posts from Stack Overflow
or by Noio
Published on 2010-03-13T13:28:31Z
Indexed on
2010/03/13
13:35 UTC
Read the original article
Hit count: 157
I'm looking to implement a property class for appengine, very similar to the existing db.ReferenceProperty
. I am implementing my own version because I want some other default return values. My question is, how do I make the property remember its returned value, so that the datastore query is only performed the first time the property is fetched? What I had is below, and it does not work. I read that the Property classes do not belong to the instances, but to the model definition, so I guess that the return value is not cached for each instance, but overwritten on the model every time. Where should I store this _resolved
variable?
class PageProperty(db.Property):
data_type = Page
def get_value_for_datastore(self, model_instance):
page = super(PageProperty, self).get_value_for_datastore(model_instance)
self._resolved = page
return page.key().name()
def make_value_from_datastore(self, value):
if not hasattr(self, '_resolved'):
self._resolved = Page.get_by_name(value)
return self._resolved
© Stack Overflow or respective owner