1

ある種類のすべてのエンティティを交換または圧縮するユーティリティを作成しました。しかし、使用されている model_class が db.Model か ndb.Model かを確認するにはどうすればよいでしょうか?

def _encode_entity(self, entity):                                             

    if self.ndb :
        entity_dict = entity.to_dict()                                                     
        self.entity_eid = entity.key.id()
        entity_dict['NDB'] = True
    else :
        entity_dict = db.to_dict(entity)
        self.entity_eid = entity.key().name()
        entity_dict['NDB'] = False

    ....

今私は使用します:

def queryKind(self):

    try :
        self.query = self.model_class.query()
        self.ndb = True
    except AttributeError :
        self.query = self.model_class.all()
        self.ndb = False
    return self.make(self._encode_entity)       # make a zip or a page

更新:私が使用したソリューション。Guidoの回答も参照してください

self.kind = 'Greeting'
module = __import__('models', globals(), locals(), [self.kind], -1)
self.model_class = getattr(module, self.kind)
entity = self.model_class()

if isinstance(entity, ndb.Model): 
    self.ndb = True
    self.query = self.model_class.query()
elif isinstance(entity, db.Model): 
    self.ndb = False
    self.query = self.model_class.all()
else :
    raise ValueError('Failed to classify entities of kind : ' + self.kind)
4

2 に答える 2

5

のみに存在する属性を使用することも、その逆も可能ですndb

たとえば_has_repeated、エンティティ_pre_get_hookのプロパティです。 あなたができるように:ndb

self.ndb = hasattr(self, '_has_repeated')
于 2013-01-09T17:08:25.660 に答える
5

ndb と db をインポートして、それぞれのモデル クラスのインスタンスであるエンティティをテストするのはどうですか?

if isinstance(entity, ndb.Model):
    # Do it the NDB way.
elif isinstance(entity, db.Model):
    # Do it the db way.
else:
    # Fail.  Not an entity.
于 2013-01-10T17:28:46.070 に答える