我刚开始使用 AppEngine 并使用 endpoints_proto_datastore 库。我的问题:当我尝试列出特定播放列表的所有播放列表项时,查询路径中的“播放列表”参数似乎被忽略了。我只是从所有播放列表中检索所有播放列表项。
我究竟做错了什么?我找不到任何具有两个模型的示例,其中模型通过 KeyProperty 相关并通过路径元素进行查询。我也不明白为什么我在数据存储中看不到 PlaylistItem.playlist (除非它是密钥的一部分)。
这些是相关的模型和方法:
from endpoints_proto_datastore.ndb import EndpointsAliasProperty
from endpoints_proto_datastore.ndb import EndpointsModel
class Playlist(EndpointsModel):
"""Models an individual Playlist."""
# fixed order
_message_fields_schema = ('id', 'user', 'title', 'private', 'created')
# actual stored information
user = ndb.StringProperty(required=True, indexed=True)
title = ndb.StringProperty(required=True, indexed=False)
private = ndb.BooleanProperty(required=False, default=True, indexed=False)
created = ndb.DateTimeProperty(required=False, auto_now_add=True, indexed=False)
class PlaylistItem(EndpointsModel):
"""Models a playlist item (appid)"""
# fixed order
_message_fields_schema = ('appid', 'inserted')
# actual stored information
appid = ndb.StringProperty(required=True, indexed=False)
inserted = ndb.DateTimeProperty(required=False, auto_now_add=True, indexed=True)
playlist = ndb.KeyProperty(required=True, kind=Playlist, indexed=True)
def PlaylistSet(self, value):
playlist = ndb.Key(Playlist, value)
@EndpointsAliasProperty(setter=PlaylistSet, required=True)
def playlist(self):
playlist
及相关方法:
@PlaylistItem.method(path='playlist/{playlist}/items', http_method='POST', name='playlist.items.put',
request_fields=('playlist','appid'))
def PlaylistItemPut(self, PlaylistItem):
PlaylistItem.put()
return PlaylistItem
@PlaylistItem.query_method(path='playlist/{playlist}/items', name='playlist.items.list',
query_fields=('playlist',),)
def PlaylistItemList(self, query):
return query # problem, I just retrieve all PlaylistItems