2

多くのユーザーがブログ エントリを投稿できる通常のブログ投稿 webapp があるが、1 人のユーザーからすべてのエントリを取得したい場合、次のデータ構造を想像します。

class Blog_Entries(ndb.Model):
    ...

class Users(ndb.Model):
    ...
    blog_entries = ndb.StructuredProperty(Blog_Entries, repeated=True)
    ...

ただし、問題は、「Blog_Entries」オブジェクトを Users.blog_entries にコピーすると、キーが失われる (元のインスタンスからコピーされない) ことです。これにより、両方の投稿を更新して一貫性を維持することが面倒になります。

これを回避する方法はありますか?問題にアプローチするためのより良い戦略はありますか?

前もって感謝します

4

2 に答える 2

3

キーをシリアル化/逆シリアル化するために、それとメソッドをサブクラス化StructuredPropertyしてオーバーライドすることもできます。キーのシリアル化を処理するために使用できます。;-)_serialize()_deserialize()KeyProperty

LocalStructuredPropertyオプションがあることがわかりましたkeep_keys。オプションの名前が示すように、ネストされたモデルのキーを格納します。

class Organization(ndb.Model):
    name = ndb.StringProperty()

class Employee(ndb.Model):
    name = ndb.StringProperty()
    organization = ndb.LocalStructuredProperty(Organization,
                                               keep_keys=True)

linux_foundation = Organization(name='Linux Foundation')
linux_foundation.put()
linus = Employee(name='Linus Torvalds', organization=linux_foundation)
linus_key = linus.put()

ndb.get_context().clear_cache()
linus = linus_key.get()
assert linus.organization.key.get().name == 'Linux Foundation'
于 2013-10-22T09:29:55.923 に答える
1

blog_entries = ndb.KeyProperty(kind="Blog_Entries", Repeated=True) を試してください。

于 2012-11-18T10:03:43.170 に答える