Database SDK控制台显示内容,应用获取空列表
我当前的应用程序使用Database SDK控制台显示内容,应用获取空列表,database,google-app-engine,Database,Google App Engine,我当前的应用程序使用db.ListProperty(db.Key)作为好友列表的多对多关系 我们有以下计划: # previous models class User(db.Model): name = db.StringProperty() nickname = db.StringProperty() join_date = db.DateProperty(auto_now_add=True) party = db.ReferenceProperty(Party
db.ListProperty(db.Key)
作为好友列表的多对多关系
我们有以下计划:
# previous models
class User(db.Model):
name = db.StringProperty()
nickname = db.StringProperty()
join_date = db.DateProperty(auto_now_add=True)
party = db.ReferenceProperty(PartyEntry, collection_name='participants')
def by_name(self, string):
return self.gql("WHERE name = :name", name=string).get()
def key_by_name(self, string):
return self.by_name(string).key()
class FriendList(db.Model):
owner = db.ReferenceProperty(User)
friends = db.ListProperty(db.Key)
以及一个处理程序,用于获取用户好友列表,对其进行处理并显示:
class Profile_FriendList(WebBase):
def get(self):
user = self._auth()
if user:
usr_key = User().key_by_name(user.nickname())
friend_list = friend_lists = FriendList.all().filter('owner', usr_key).fetch(10)
self.renderskeleton( { 'friendlist': friend_list } ,'friends.html')
我在friendlist.friends中用两个db.Key()列表项填充了一个测试friendlist。
s.c.SDK控制台(>Interactive Datastorageviewer)向我显示以下项目:
key1,key2
但是如果我用它的键和
打印frlst.friends
输出:[]
处理程序中也存在同样的问题。
我没有可以处理的数据。
但数据是存在的
修复:好友列表问题,被调用的FriendList对象不是查询,只是一个新的FriendList()对象。
更新代码
修复:已解决完整问题
usr_key = User().key_by_name(user.nickname())
logging.info(user.nickname())
logging.info(usr_key)
friend_list = FriendList().all().filter("owner", usr_key).fetch(20)
logging.info(friend_list)
logging.info(friend_list[0].friends)
friends = User.get(friend_list[0].friends)
logging.info(friends)
self.renderskeleton( { 'friends': friends } , 'friends.html')
我选择了一个GqlQuery结果列表,而不是我想要的“一个”,我所要做的只是将好友的密钥列表放入一个User.get()中,瞧,我有了所有必要的数据。
friend\u list=FriendList(owner=usr\u key)
不是一个,它正在创建一个新的FriendList实例
您需要:friend\u list=FriendList.all().filter('owner',usr\u key)。fetch(10)
其他意见:
@classmethod
def by_name(cls, string):
return cls.gql("WHERE name = :name", name=string).get()
@classmethod
def key_by_name(cls, string):
return cls.by_name(string).key()
# to call:
user = User.key_by_name('their name')
friend\u list=FriendList.get\u by\u key\u name(str(user.user\u id())
。您需要一种方法来处理一个好友列表不够的情况,但这可能很少见——而且解决起来也不是那么困难(在key_名称中添加一个序列号,并在用户种类中存储一个(非索引的)序列计数,然后您就可以轻松地生成key_名称)上面没有读到:.key\u by\u name()是一个User()方法,它通过名称获取用户密钥:)但是,用户对象不可访问:(@daemonfire300,是的,我错过了;)您确定您的用户实体的名称字段中填充了
User.昵称()
值吗?@Robert Kluin,jep检查过了吗twice@daemonfire300,你能用正确的代码更新你的问题吗。另外,添加一个登录调用,以确保user.nickname()
返回您期望的内容。而且,如果您要返回用户实体,请在问题中包括您实际用于创建好友列表的代码。