0

我在 python Google App Engine 中有以下模型:

class UserAction(ndb.Model):

    author_gae_key = ndb.KeyProperty(indexed=True)
    target_gae_key = ndb.KeyProperty(indexed=True) # key of word, topic, etc.
    action_type = ndb.StringProperty(indexed=True) # select, like, dislike, wantToSee etc.
    recipients_keys = ndb.KeyProperty(repeated=True,indexed=True)

这个类是一种日志,可以让我查询关系,比如谁点击了什么。Receipients 是一个列表,用于可能对此操作感兴趣的人(即您的朋友)。这可能很长,我不想经常序列化它。

我有以下功能,它告诉我某个作者是否对某个目标执行了某个操作:

def isActionDictMultipleTargets(action_type,author_gae_key,target_gae_keys_list):
    out_dict = {}
    if(target_gae_keys_list):
        actions = ndb.gql("SELECT * FROM UserAction WHERE author_gae_key = :1 AND action_type = :2 AND target_gae_key IN :3",author_gae_key,action_type,target_gae_keys_list)
        for an_action in actions:
            out_dict[an_action.target_gae_key.urlsafe()] = True
        false_keys = list(set(target_gae_keys_list)-set(out_dict.keys()))
        for a_key in false_keys:
            out_dict[a_key] = False
    return out_dict

现在我只需要 .target_gae_key 字段,因为有一个相等过滤器,所以我无法对其进行投影。

我想到了:

  1. 将 target_gae_key 设置为实体的父键,并进行查询。但这并不漂亮,我也想在 author_gae_key 上进行类似的查询。

  2. 最后,最好的办法是只做一个查询,结果总是列表的大小,当查询没有找到任何东西时,结果是“空”的。那存在吗?

4

0 回答 0