我将密钥存储在名为teacher
的ndb.KeyPropery属性中的另一个实体中class Section(ndb.Model):
name = ndb.StringProperty(required=True)
teacher = ndb.KeyProperty(required=True, kind=Staff)
students = ndb.IntegerProperty(repeated=True)
active = ndb.BooleanProperty(default=True)
我在那里存放的东西很好,但是当我检索一个值时,它看起来并不完全像ndb.Key
(在开发服务器的交互式控制台中......)
from google.appengine.ext import ndb
import amt
from sections.model import Section
section = Section.query(Section.name == 'test').fetch()[0]
print(section.teacher)
print(type(section.teacher))
print(section.teacher.kind())
print(section.teacher.id())
print(section.teacher.get())
print(ndb.Key(section.teacher.kind(), int(section.teacher.id())).get())
...给出
Key('Staff', '5486563022602240')
<class 'google.appengine.ext.ndb.key.Key'>
Staff
5486563022602240
None
Kxxxxxxx, Mxxx
那么为什么section.teacher.get()
返回None
和ndb.Key(section.teacher.kind(), int(section.teacher.id())).get()
会返回我的实体(__str__
会被覆盖以打印出一个名字......)
答案 0 :(得分:1)
请注意,密钥Key('Staff', '5486563022602240')
与提取ndb.Key(section.teacher.kind(), int(section.teacher.id())
这些密码的代码不同。
第一个定义了key_name(str),并使用id(int)成功获取。
也许您第一次将错误的密钥存储在教师中。
你是如何构建原始密钥的?