2

私は非常に単純なユースケースのように見せつけようとしていますが、私は悲惨に失敗しているようです。この課題の目的は、高レプリケーションデータストア内のGoogleアカウントのユーザー名を使用してログインし、非常に一貫性のあるユーザーの一連のレコードを検索することです。NDBはUsers APIを使ってエンティティグループを形成しています

私のデータは次のようになります。私は最初にアカウントを作成すると

class Account(ndb.Model): 
    owner = ndb.UserProperty() 
    name = ndb.StringProperty() 

class Content(ndb.Model): 
    content = ndb.StringProperty() 

、私は次のようにします。

current_user = users.get_current_user() 
new_account = Account(owner=current_user, name='Some Name') 
new_account.put() 

は今、コンテンツを作成します。

new_content = Content(parent=new_account.key, content='Some Content') 
new_content.put() 

ユーザーがログインすると、私はUserPropertyでしか照会できませんが、エンティティグループの親としてユーザーを設定できないようですが、どのようにすれば、私はログインしたユーザーによって常にアカウントを検索し、一貫性があることを確認するにはどうすればよいですか?

アカウントを取得すると、祖先のクエリ処理によってコンテンツの一貫性が確保されますが、ユーザーに基づいて祖先を特定することには時間がかかります。

+0

、私は実際にその意志マッピングエンティティを進めて行きますよユーザーIDをアカウントキーにマップします。このようにして、私はアカウントに対して多くのユーザーを持つことができますが、引き続きget()を使ってアカウントを取得します。 – Sologoub

+0

また、ユーザーが電子メールアドレスを変更すると矛盾する可能性があるため、ドキュメントにはUserPropertyが保存されないようにアドバイスします。https://developers.google.com/appengine/docs/python/users/userobjects – Spycho

答えて

5

これを行う最も簡単な方法は、キー名を使用することです。この場合、アカウントエンティティのキ​​ー名はユーザーのIDである必要があります。

new_account = Account(owner=current_user, id=current_user.user_id(), name='Some Name') 

そして、あなたは、このようにそれらを検索することができます:あなたは、このようなアカウントを作成することができニックが示唆された内容にビットを展開するには

existing_account = Account.get_by_id(current_user.user_id()) 
+0

ありがとう、ニック!それはまさに私が探していたものです。私はドキュメントでそれを逃したと思います。 – Sologoub

0

私は正確にそれをしたいとは思っていませんが、Accountの親エンティティも作成しなければならないので、祖先でクエリを実行できます。

+0

いいえ、あなたはしません。 –

+0

ああ。ユーザーごとに複数のアカウントエンティティを作成したいと思っていました。 Accountエンティティを照会するときに一貫性を確保したい場合は、@ NickJohnsonの答えが必要です。 :) – Albert

関連する問題