0

この回答を自分のプロジェクトに適用しています

これは、is_deleted が後で追加された私の ndb エンティティです。

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'))

のモデルにプロパティhasattr(froom, 'is_deletedXXX')がないため、 は False を返します。is_deletedXXXFRoom

于 2016-10-16T16:02:13.340 に答える