Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database SDK控制台显示内容,应用获取空列表_Database_Google App Engine - Fatal编程技术网

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')
    
  • 你有没有考虑过和我一起使用?它将比查询更快

  • 还可以使用用户id作为好友列表的键名,然后代替查询,您可以执行
    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()
    返回您期望的内容。而且,如果您要返回用户实体,请在问题中包括您实际用于创建好友列表的代码。