2

ndb.Key('Books', 'Programming.one') のようなキーを使用して、繰り返されるプロパティ要素に対処しようとしましたが、このキー (.one 部分) は有効ではありません。

以下のサンプル モデルは、アプリのモデルを簡略化したものです。このコード例では、本の章とタグの間に (キーを使用して) 依存関係があります。

class Tags(ndb.Model):
    tag = ndb.StringProperty()

例: タグ(id = 'python', タグ = 'python')

class Books(ndb.Model):
    book = ndb.StringProperty)
    chapters = ndb.StringProperty(repeated = True)

例 : Books(id = 'プログラミング', book = 'プログラミング', chapters = ['one', 'two'])

class Dependencies(ndb.Model):
    chapter_key = ndb.KeyProperty()
    tag_keys = ndb.KeyProperty(repeated = True)

例 :

chapter_key = ndb.Key('Books','Programming.one')
dependency_key = ndb.Key('Dependencies', chapter_key.id())
Dependencies(key = dependency_key, chapter_key = chapter_key, 
                   tag_keys = [ndb.Key('Tags', 'python'), ndb.Key('Tags', 'java')])

ndb.Key を使用して繰り返されるプロパティに対処することは可能ですか? 私のコード例では、chapter_key が無効です。フックまたはプロパティのサブクラスを使用して機能させることはできますか?

これを機能させるには、有効な Book Key と StringProperty を組み合わせてチャプターを保持します。

book_key = ndb.Key('Books','Programming')
chapter = 'one'
dependency_key = ndb.Key('Dependencies', book_key.id() + '.' + chapter)
Dependencies(key = dependency_key, book_key = book_key, chapter = chapter, 
                   tag_keys = [ndb.Key('Tags', 'python'), ndb.Key('Tags', 'java')])

しかし、私は鍵から利益を得たいと思っています。

構造化されたプロパティについて同じ質問があります。この質問では、繰り返される StringProperty の章は、次のような繰り返される StructuredProperty に置き換えられます。

class Chapters(ndb.Model):
    chapter = ndb.StringProperty()
    word_count = ndb.IntegerProperty()

私の例とキーの使用について:

依存関係のキーはさまざまな種類を参照できるため、依存関係でキーを使用します。これらの種類は、本の章のように繰り返されるプロパティを持たないため、本のような種類とは異なります。アプリケーションで、chapter_keys の代わりに、depends_on_keys を繰り返し使用しています。

この例では、親キーも省略しています。本のような種類には依存関係がありますが、私のアプリケーションでは、本のような種類に依存するエンティティを見つけることができません。

4

2 に答える 2

2

いいえ、キーを使用してエンティティの一部を識別することはできません。エンティティの一部を参照する場合は、エンティティ パラメータを指定する独自のスキームと組み合わせてキーを使用する必要があります。

于 2013-01-17T12:17:08.580 に答える
1

上記のコードはsintaxの用語では正しくないように見えるので、私は興味があります。

tag_keys = [ndb.Key('Tags', 'python', ndb.Key('Tags', 'java']

あなたは以下のコードを使うことができます、それは私のために働きました:

class SomeModel(ndb.Model):
    pass


class WithKeys(ndb.Model):
    keys=ndb.KeyProperty(SomeModel,repeated=True)

keys=[ndb.Key(SomeModel,i) for i in range(1,10)]

with_keys=WithKeys(keys=keys)

print with_keys.keys

それは印刷します:

[Key('SomeModel', 1), Key('SomeModel', 2), Key('SomeModel', 3), Key('SomeModel', 4), Key('SomeModel', 5), Key('SomeModel', 6), Key('SomeModel', 7), Key('SomeModel', 8), Key('SomeModel', 9)]

グーグル運

于 2013-01-16T22:00:51.050 に答える