1

Как я могу получить только свойства объекта, указанные в запросе проекции, в списке объектов _properties?Получить только проецируемые свойства объекта

Я имею в виду:

class Demo(ndb.Model): 
    first_prop = ndb.StringProperty() 
    second_prop = ndb.StringProperty() 

Demo(first_prop='First', second_prop='Second').put() 

q = Demo.query(projection=[first_prop]) 
e = q.fetch() 
print e[0]._properties.keys() 

возвращается ['second_prop', 'first_prop']. Я хочу len(_properties) быть 1 ...

+0

Я знаю, что запрос 'q' имеет атрибут' projection', просто не понимаю, как проверить, принадлежит ли свойство проекции: 'q.projection' returns' (Demo ('first_prop'),) 'but' if q_proj и prop в q_proj' просто не работает ... – user2154587

ответ

1

Существует _projection свойство можно использовать на результат (вызвать этот обработчик, загружая его в вашем браузере http://localhost:8080/projection по крайней мере дважды ):

import webapp2 
from google.appengine.ext import ndb 


class Dummy(ndb.Model): 
    p1 = ndb.StringProperty() 
    p2 = ndb.StringProperty() 


class ProjectionHandler(webapp2.RequestHandler): 

    def get(self): 
     # run this handler at least twice before looking at the console output 
     d = Dummy(id='abc') 
     d.p1 = 'p1' 
     d.p2 = 'p2' 
     d.put() 
     q = Dummy.query(projection=['p1']) 
     r = q.fetch() 
     if len(r) > 0: 
      print r[0]._properties.keys() # prints: ['p1', 'p2'] 
      print r[0]._projection # prints: ('p1',) 

app = webapp2.WSGIApplication([ 
    ('/projection', ProjectionHandler) 
]) 

Дополнительно ,

q.projection возвращает (Demo ('first_prop'))

Возможно ли, что вместо имени свойства в виде строки i.e. 'first_prop' вы передали объект или какой-либо другой объект в Demo.query(projection=[first_prop])? Вы должны получить тот же результат, что и r[0]._projection.

Смежные вопросы