我在 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 字段,因为有一个相等过滤器,所以我无法对其进行投影。
我想到了:
将 target_gae_key 设置为实体的父键,并进行键查询。但这并不漂亮,我也想在 author_gae_key 上进行类似的查询。
最后,最好的办法是只做一个键查询,结果总是列表的大小,当查询没有找到任何东西时,结果是“空”的。那存在吗?