ndb.KeyProperty值get()返回None

时间:2014-04-05 03:00:20

标签: google-app-engine google-cloud-datastore

我将密钥存储在名为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()返回Nonendb.Key(section.teacher.kind(), int(section.teacher.id())).get()会返回我的实体(__str__会被覆盖以打印出一个名字......)

1 个答案:

答案 0 :(得分:1)

请注意,密钥Key('Staff', '5486563022602240')与提取ndb.Key(section.teacher.kind(), int(section.teacher.id())这些密码的代码不同。

第一个定义了key_name(str),并使用id(int)成功获取。

也许您第一次将错误的密钥存储在教师中。

你是如何构建原始密钥的?