Google app engine 按祖先的EndPointsModel查询
如何根据从令牌获得的用户id按祖先进行查询 这是我的代码:Google app engine 按祖先的EndPointsModel查询,google-app-engine,google-cloud-endpoints,endpoints-proto-datastore,Google App Engine,Google Cloud Endpoints,Endpoints Proto Datastore,如何根据从令牌获得的用户id按祖先进行查询 这是我的代码: class MyUserClass(EndPointModel): user_object = ndb.UserProperty(required=True, indexed=False) class MyModel(EndPointModel): ... @MyModel.method(user_required=True, name="model.add", path="model") def add_m
class MyUserClass(EndPointModel):
user_object = ndb.UserProperty(required=True, indexed=False)
class MyModel(EndPointModel):
...
@MyModel.method(user_required=True, name="model.add", path="model")
def add_mymodel(self, my_model):
gplus_user_id = auth_util.get_google_plus_user_id()
if gplus_user_id is None:
raise endpoints.ForbiddenException(NidAppUser.NO_GPLUS_ID)
user = MyUserClass.get_or_insert(gplus_user_id, user_object=endpoints.get_current_user())
my_model.parent = user.key.string_id()
my_model.put()
return my_model
@MyModel.query_method(user_required=True, name="list.mymodel", path="models",
query_fields=('order','attr1',))
def list_models(self, query):
gplus_user_id = auth_util.get_google_plus_user_id()
if gplus_user_id is None:
raise endpoints.ForbiddenException(NidAppUser.NO_GPLUS_ID)
## Here or in thsi decorator function I want to do something like
## query.ancestor.(ndb.Key(MyClassUser, gplus_user_id)) (such as the DB Datastore)
## to return only the query of MyModels that belong to the current user
return query
我需要通过MyUserClass键的键创建一个查询祖先。我不想使用该解决方案在我的模型中添加字段所有者,因为查询祖先比过滤器更快,而且它确实有助于我组织数据库
谢谢您您可以基于祖先构造一个查询,如下所示:
myancestorkey = ndb.Key(MyUserClass, gplus_user_id)
myquery = MyModel.query(ancestor=myancestorkey)
@MyModel.query_method(user_required=True, name="list.mymodel",
path="models", query_fields=('order','attr1',))
def list_models(self, query):
# Returns only MyModels that belong to the current g+ user
return query.filter(MyModel.parent == auth_util.
get_google_plus_user_id())
使用endpoints_proto_数据存储,您可以执行以下操作:
myancestorkey = ndb.Key(MyUserClass, gplus_user_id)
myquery = MyModel.query(ancestor=myancestorkey)
@MyModel.query_method(user_required=True, name="list.mymodel",
path="models", query_fields=('order','attr1',))
def list_models(self, query):
# Returns only MyModels that belong to the current g+ user
return query.filter(MyModel.parent == auth_util.
get_google_plus_user_id())
好的,谢谢你,但我的意思是,如果有一种方法可以使用EndPointModel的查询,只是“更新”它,或者为祖先查询创建一种过滤器,而不是创建一个新的过滤器……我没有完全理解你的上述评论。你能解释一下吗?在MethodList_模型中,我得到一个对象查询作为参数,该查询已经使用我在decorator中提到的过滤器创建。我希望从这个查询中只获取作为祖先“myancestorkey”的子行,而不是创建一个新查询。