0

将此答案应用于我的项目

这是我的 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

我究竟做错了什么?

4

1 回答 1

0

由于设置is_deleted了选项的属性,这是预期的行为default:如果未明确设置属性,数据存储将自动返回该默认值。

属性选项表中:

在此处输入图像描述

因此,对于您default在模型中设置选项的属性,检查该属性是否存在是不必要的 - 它始终存在,因此您可以直接执行以下操作:

for froom in frooms:
    logging.info(froom.is_deleted)
    # or
    logging.info(getattr(froom, 'is_deleted'))

返回 False 因为您的模型中hasattr(froom, 'is_deletedXXX')没有is_deletedXXX属性FRoom

于 2016-10-16T16:02:13.340 回答