I am applying this answer to my project
This is my ndb entity where is_deleted added later.
class FRoom(ndb.Model):
location = ndb.StringProperty(default="")
is_deleted = ndb.BooleanProperty(default=False) #added later
#other fileds
when I do print my entities with logging.info, I have
FRoom(key=Key('FRoom', 5606822106890240), is_deleted=False, location=u'denizli')
FRoom(key=Key('FRoom', 6169772060311552), is_deleted=False, location=u'aydin' )
FRoom(key=Key('FRoom', 6451247037022208), location=u'bursa')
When I do for do
for froom in frooms:
logging.info(hasattr(froom, 'is_deleted')) # gives always True
but when I do for example:
logging.info(hasattr(froom, 'is_deletedXXX')) #gives me False
What am I doing wrong?
This is expected behaviour due to the
is_deletedproperty having thedefaultoption set: the datastore will automatically return that default value if the property was not explicitly set.From the Property Options table:
So for properties for which you set the
defaultoption in the model the check if the property exists is unnecessary - it always exists, so you can directly do:The
hasattr(froom, 'is_deletedXXX')returns False because you don't have ais_deletedXXXproperty inFRoom's model.