最後の 2 つ (センサー/読み取り値) のキー/親のモデリングに問題があります。それぞれの祖先パスを保持したいと思います。問題は、階層内の最後の ID にしかアクセスできないことです。毎回複雑なクエリを実行する必要がありますか、それとももっと簡単な方法がありますか?
いずれにせよ、私が維持しようとしている階層は次のとおりです。
ホーム -> ゾーン -> センサー -> 測定値
テストするために、いくつかのフォームを作成しました。各フォームの選択フィールドは次のように行われます。
form.zonekey.choices = [ (h.key.id(),h.sensortype)for h in Sensor.query()]
ID/キーの使用はhtml形式で表示されるため安全ではないことに気づきましたが、途中でIDをハッシュする以外にこれを行う方法がわかりません。
私の問題は、キーがゾーンキーとホームキーで構成されており、それらが何であるかがわからないため、フォームから選択した上記の ID を使用してゾーンキーと親を検索できないことです。でゾーンを調べる
ndb.Key(Zone, ID) は機能していないようです (キーには実際に Homekey が含まれており、そこにあることがわかりません)。
次のようなクエリを実行する唯一の選択肢は次のとおりです。
Zone.query().filter(Zone.zname == 'zonetest1')
そのキーを取得し、それを階層内の次のレベル (センサー) の親として使用します。
それは費用がかかり、複雑な方法のようです。これを行うためのより簡単でエレガントな方法はありますか?
これが私のテストと結果の写真です。