这似乎是一个简单的问题,但是想要比我目前所做的更清楚:
给出这样的表格(仅限示例):
class People(db.Model):
FirstName = db.StringProperty(multiline=False,required=True)
LastName = db.StringProperty(multiline=False,required=True)
class Animals(db.Model):
AnimalName = db.StringProperty(multiline=False,required=True)
class SpiritAnimal(db.Model):
Person = db.ReferenceProperty(Candidates,required=True)
Animal = db.ReferenceProperty(Candidates,required=True)
有一种方法可以填写“人物”。和动物'使用查询到其他两个表,如下所示(仅限示例):
# Query for some person(s)
query = People.all()
query.filter('FirstName', 'Patrick')
query.get()
for person in query:
newSpiritAnimal = SpiritAnimal(
Person = person,
Animal = animal # Assuming pulled previously
)
newSpiritAnimal.put()
你也可以抓住钥匙,但这里是我的问题所在:
基于如上所述的查询,您可以拉出密钥并稍后使用吗?当然可以,但是最好的方法是什么?
让我们考虑一下这个例子:
for person in query:
key_for_later_use = person.key()
现在我们可以使用:
Person = key_for_later_use
人们会认为正确吗?除了这个person.key()对象似乎没有做这个伎俩所以我更多地研究了它:
str(person.key())
这提供了一个类似于在查看“数据存储查看器”时在GAE SDK控制台中看到的内容的键。因此可能有用,但也没有运气。
什么是从查询中获取密钥的最佳方法,可能是在通过for循环进行迭代时?
我一直在尝试通过创建一个列表来卸载数据存储区查询,我检查现有的内容,然后从另一个列表中获取密钥:
people_list = [] # Assume populated with 'FirstName'
people_list_keys = [] # Assume populated with person.key()
if 'Patrick' in people_list:
patrick_key = people_list_keys[people.index('Patrick')]
然而,person.key()并没有真正起作用,str()围绕着看起来正确但不起作用..而且我的意思是将它作为SpiritAnimal.Person用于ReferenceProperty的插入
思想?
哦,我真的没有制作一个SpiritAnimal应用程序,这只是一个例子;)
答案 0 :(得分:1)
其他地方可能存在脱节,我运行了此代码:
People(FirstName="Patrick", LastName="Doe").put()
animal = Animals(AnimalName="Tiger").put()
people_list = []
people_list_keys = []
query = People.all()
query.filter('FirstName', 'Patrick')
query.get()
for person in query:
people_list.append(person.FirstName)
people_list_keys.append(person.key())
patrick_key = people_list_keys[people_list.index('Patrick')]
newSpiritAnimal = SpiritAnimal(
Person = patrick_key,
Animal = animal
)
newSpiritAnimal.put()
并且精神动物被放置了'没问题。我不太了解你想做什么。也许更多的解释,我可以帮助更多。