我在为最后两个(传感器/读数)建模键/父母时遇到问题。我想为每个人保留祖先路径。问题是我只能访问层次结构中的最后一个 id。这是否需要我每次都进行复杂的查询,还是有更简单的方法?
无论如何,我试图保持的层次结构是:
主页 -> 区域 -> 传感器 -> 读数
为了测试它,我制作了一些表格。每个表单的选择字段是这样完成的:
form.zonekey.choices = [ (h.key.id(),h.sensortype)for h in Sensor.query()]
我意识到使用 id/key 是不安全的,因为它以 html 形式显示,但我不知道如何做到这一点,除了一路散列 id。
我的问题是我不能使用从表单中选择的上述 ID 来查找区域密钥和父项,因为密钥由区域和主页密钥组成,我不知道它们是什么。通过以下方式查找区域
ndb.Key(Zone, ID) 似乎不起作用(因为密钥实际上包括 Homekey 而我不知道那里)。
我唯一的选择是做这样的查询:
Zone.query().filter(Zone.zname == 'zonetest1')
并获取它的密钥并将其用作层次结构中下一级(传感器)的父级。
这似乎是一种昂贵且复杂的方式。有没有更简单、更优雅的方法来做到这一点?
这是我的测试和结果的图片。