0

我刚开始学习 python,而且我也是 Google 数据存储模型的新手。如果这个问题看起来太菜鸟,请原谅我。

我想做的很简单。

我正在验证用户是否已经在帖子中被喜欢。所以我需要检查一个键是否在 Google 数据存储模型的 ListProperty 中。我的代码的 PFB。

@classmethod
def likePost(cls,user_key):
    if user_key not in cls.liked_user:
        cls.liked_user.append(user_key)
        return True
    else:
        return False

cls 是来自 Google Datastore 的 Model 类型的“Post”对象。'liked_user' 是“发布”对象的属性类型 ListProperty。

但显然, ListProperty 是不可迭代的。以下是来自控制台的错误。

TypeError:“ListProperty”类型的参数不可迭代。

所以,请帮我弄清楚如何实现它。

我尝试了几个小时的谷歌搜索,仍然无法弄清楚如何实现这一点。

提前致谢。

4

1 回答 1

3

这些属性不适用于模型类,它们适用于该模型的各个实例。一个实例代表数据存储中的一个实体,并且正是这个实例在其“liked_user”字段中有一个列表。询问值是否在类属性中是没有意义的。

目前尚不清楚您要在这里做什么。如果您只想知道一个用户是否已经喜欢另一个用户,那么它根本不应该是一个类方法;只是一个普通的实例方法,它采用实例。

# no decorator
def likePost(self, user_key):
    if user_key not in self.liked_user:
        self.liked_user.append(user_key)
        return True
    else:
        return False

但是,如果您试图找出任何实例在其 like_user 中是否具有该键,那么您需要查询数据库:

@classmethod
def likePost(cls,user_key):
    users = cls.query(cls.liked_user == user_key).get()
    if users:
        ...
于 2017-05-15T13:47:15.630 回答