我正在将this answer应用于我的项目
这是我的ndb实体,稍后会添加is_deleted。
class FRoom(ndb.Model):
location = ndb.StringProperty(default="")
is_deleted = ndb.BooleanProperty(default=False) #added later
#other fileds
当我用logging.info打印我的实体时,我有
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')
当我做的时候
for froom in frooms:
logging.info(hasattr(froom, 'is_deleted')) # gives always True
但是当我这样做的时候:
logging.info(hasattr(froom, 'is_deletedXXX')) #gives me False
我做错了什么?
答案 0 :(得分:0)
由于设置了is_deleted
选项的default
属性,这是预期的行为:如果未明确设置该属性,数据存储区将自动返回该默认值。
来自Property Options表:
因此,对于在模型中设置default
选项的属性,检查属性是否存在是不必要的 - 它始终存在,因此您可以直接执行:
for froom in frooms:
logging.info(froom.is_deleted)
# or
logging.info(getattr(froom, 'is_deleted'))
hasattr(froom, 'is_deletedXXX')
返回False,因为is_deletedXXX
模型中没有FRoom
属性。