将*Key存储到GAE本地数据存储中,在DataStoreViewer中会给我报错。

huangapple go评论74阅读模式
英文:

storing *Key to GAE local datastore give me error in DataStoreViewer

问题

我有一个在实体A中引用实体B的键。
我可以将数据放入数据存储中而不出错,但是当尝试从Datastore Viewer浏览实体A时,会出现以下错误:

> '找到不完整的键以用于引用属性%s。' % name)
> BadValueError: 找到不完整的键以用于引用属性ds_key。

似乎是将键归咎于不完整。如果我使用NewKey()获取一个完整的键,我需要手动提供一个唯一的字符串或整数ID给键,这不是我想要的。我只想让数据存储为我生成B的键,并将该键保存在实体A中。

谢谢

英文:

I have a *Key in entity A referring entity B.
I can put() the data to data store without error but when try to browse entity A from Datastore Viewer, it gives the following error:

> 'Incomplete key found for reference property %s.' % name)
> BadValueError: Incomplete key found for reference property ds_key.

it seems blaming the key to be incomplete. If I use NewKey() to acquire a complete key, I need to manually provide a unique string or int ID to the key which is not what I want. I just want datastore generate a key of B for me and I keep that key from entity A.

thanks

答案1

得分: 1

Put()即使在使用不完整的Key进行Put()操作时,也会返回一个完整的Key。你需要按照以下步骤进行操作:

  1. 为实体B生成一个不完整的Key(无需手动提供唯一ID)。
  2. 将实体B使用Put()方法存储到数据存储中,并查看返回值,以获取完整的Key。
  3. 在实体A中使用该值。
  4. 将实体A使用Put()方法存储到数据存储中。

现在,实体A将正确引用实体B

英文:

Put() returns a complete Key even when you Put() with an incomplete Key. You need to

  1. Generate an incomplete Key for B (no need to manually provide a unique ID).
  2. Put() B to the datastore and look at the return value so you have a complete Key for it.
  3. Use that value in entity A.
  4. Put() A to the datastore.

Now A will correctly reference B.

huangapple
  • 本文由 发表于 2013年8月18日 03:24:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/18292526.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定