Google App Engine db.key()问题/用户Feed模型

时间:2010-01-18 00:32:42

标签: google-app-engine

正在为用户设计饲料系统。

所以我有:

class User(db.Model):
  name = db.StringProperty()
  list_of_keys = db.StringListProperty()

class Feed(db.Model):
  event = db.StringProperty()
  timestamp = db.DateTimeProperty()

# I created 10 feed entities

# assuming i already have my 10 feed entities, I take their keys and put into this list
list_of_keys = ["key1","key2","key3",.........."key10"]

如果我使用

db.key(list_of_keys)

我得到了所有的实体。没问题。 因此,当所有密钥都存在时它会起作用(即:如果实体仍在数据存储区中,它可以工作)

但如果我删除其中一个实体,则db.key()将返回NoneType。

关于如何解决这个问题的任何建议?

PS:我试图避免在我的Feed系统中使用ReferenceProperty,因为我认为它可能会变得混乱

如果你仍然建议我使用ReferenceProperty,这是我的目标:
1.每个Feed实体应“属于”多个用户 2.每个用户最多可以有20个馈送 3.新的Feed将根据时间戳替换旧的feed。

很想听听你的想法/解决方案。

1 个答案:

答案 0 :(得分:2)

假设您有编码实际键的字符串(而不仅仅是键名或其他内容),首先要创建字符串列表(您非常特别地混淆地选择调用键列表虽然显然显然是字符串的列表!而是!)回到Key s的列表中:

thekeysforreal = [db.Key(k) for k in list_of_keys]

现在,db.get(thekeysforreal)将根据the docs完成工作:

  

如果提供了一个密钥列表,那么   返回值是一个对应的列表   模型实例,无值   当没有实体存在时   对应的密钥。