2

データストア内の1対多の関係を理解し​​ようとしています。モデルにReferencePropertyが含まれている場合、どのようにクエリを更新してユーザーのレコードを更新するのか理解できません。私はこのモデルを持っていると言う:ReferencePropertyを使用しているときにデータストアを照会する方法は?

class User(db.Model): 
    userEmail = db.StringProperty() 
    userScore = db.IntegerProperty(default=0) 

class Comment(db.Model): 
    user = db.ReferenceProperty(User, collection_name="comments") 
    comment = db.StringProperty() 

class Venue(db.Model): 
    user = db.ReferenceProperty(User, collection_name="venues") 
    venue = db.StringProperty() 

私が正しく理解していれば、一意にuserEmailで識別される同じユーザーは、多くのコメントを持つことができ、今では多くの会場(レストランなど)

関連付けることができる、のは言わせてユーザ[email protected]はすでにデータベースにあり、新しいエントリを送信します。

Based on this answerは、私のような何かを実行します。

q = User.all() 
q.filter("userEmail =", [email protected]) 
results = q.fetch(1) 
newEntry = results[0] 

をしかし、私はこれが何をするかは明らかではありませんよ!私がしたいのは、class Commentclass Venueのフィールドのcommentvenueフィールドを更新することです。

この機能の仕組みを理解できたら助かりますか?ありがとう。

comments = Comment.all().filter("user =", user.key()).fetch(50) 

ですから、最初に電子メールでユーザーを検索し、そのを使ってコメントや会場を検索することもできます、特定のユーザーのすべてのコメントを取得し、ユーザのキーを使用してユーザーのプロパティをフィルタリングするために

答えて

4

(コメントを参照してください):

q = User.all() # prepare User table for querying 
q.filter("userEmail =", "[email protected]") # apply filter, email lookup 
               - this is a simple where clause 
results = q.fetch(1) # execute the query, apply limit 1 
the_user = results[0] # the results is a list of objects, grab the first one 

このコードthe_userした後は、電子メール"[email protected]"を持つユーザレコードに対応するオブジェクトとなります。参照プロパティを設定したら、the_user.commentsthe_user.venuesでコメントと会場にアクセスできます。これらのいくつかの会場を変更することができ、このように言う:

some_venue = the_user.venues[0] # the first from the list 
some_venue.venue = 'At DC. square' 
db.put(some_venue) # the entry will be updated 

私はあなたが非常に良い例を持ってGAEのドキュメントの一般的なスイープを作ることを示唆している、あなたはそれが非常に参考になります。 http://code.google.com/appengine/docs/python/overview.html

**更新**:ユーザーに新しい会場を追加するには、単に新しい会場を作成し、照会されたユーザーオブジェクトを会場のユーザー属性として割り当てます。

new_venue = Venue(venue='Jeferson memorial', user=the_user) # careful with the quoting 
db.put(new_venue) 
+0

大きな説明、非常に有用な、ありがとう。 しかし、私はまだユーザーに関連付けられた新しい会場をどのように追加するのか分かりません。 あなたが与えた例では、私はすでにデータベースに入っている会場をつかみ、それを変更します。 しかし、このユーザーは新しい会場についての新しいコメントを投稿しています。 – Zeynel

+0

上記の更新を参照してください。 – vonPetrushev

+0

この質問のお手伝いを心から感謝します(特に、行ごとのコメント)。 – Zeynel

1

キー。あなたが投稿スニペットはこれをやっている

+1

実際には、電子メールのルックアップを使用すると、コメントに簡単にアクセスできます'user.comments'で。 – vonPetrushev

+0

あなたの答えをありがとう。私はコメントや会場を検索する鍵を見つける方法を知らない。私はその意味を読まなければなりません。 この場合、私がしたいことは、ユーザーにコメントと会場を追加する方法を理解することです。 ユーザーのレコードを新しいコメントで更新するにはどうすればよいですか? – Zeynel

+0

@vonPetrushev:もう一度お返事いただきありがとうございます。どのように私は電子メールのルックアップでユーザーを読み込むのですか?これが何を意味するかわからない。 – Zeynel

関連する問題