2

Rafe Kaplanがデータストアhereに1対多の関係を使用することの良い説明があります。私はそれをUserVenueのより単純なケースに適応させようとしました。だから、ユーザーは多くのレストランに行くことができます。そして、私は、ユーザーの電子メールやレストランを印刷したいユーザーが行ってきました:データストアの1対多の関係

class User(db.Model): 
    userEmail = db.StringProperty() 

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

class OneToMany(webapp.RequestHandler): 
    def get(self): 
     scott = User(userEmail="[email protected]") 
     scott.put() 
     Venue(user=scott, 
        venue="club1").put() 
     Venue(user=scott, 
        venue="club2").put() 

     for v in scott.venues: 
      self.response.out.write(v.venue) 

これは"club1 club2"

を印刷します。しかし、私は彼がに行った場所で"[email protected]"を関連付けます。ので、私のような何か印刷したい:

for v in scott.venues: 
    self.response.out.write(userEmail) 
    self.response.out.write(v.venue) 

をしようと"[email protected]: club1, club2"

をエラーを与える:

self.response.out.write(userEmail) 
NameError: global name 'userEmail' is not defined 

これを行うための正しい方法は何ですか?ありがとう!

EDIT2

query = User.all() 
    query.filter("userEmail =", "[email protected]") 
    results=query.fetch(1) 
    scott=results[0] 
    self.response.out.write("%s went to:" % scott.userEmail) 
    for venue in scott.venues: 
     self.response.out.write(venue.venue) 

表示:

s[email protected] went to:club1club22

EDIT(再:答えをvonPetrushevことにより、(再:vonPetrushevによって答え)

は、これが動作しているようです)

少し混乱しています。

だから私はこの

query = User.all() 
query.filter("userEmail =", "[email protected]") 

のようなクエリを記述し、このユーザーに関連付けられているすべての会場を表示したいです。

UserVenueがどのように接続されているかは不明です。

答えて

1

userEmailは、forループの範囲内で定義された名前ではありません。何が必要です:

for v in scott.venues: 
    self.response.out.write(scott.userEmail) 
    self.response.out.write(v.venue) 

EDIT:あなたの編集については - ではないのGoogleアプリデータストアで、することはできません - あなたの目標は、参加したクエリを作成する場合。ただし、このようなユーザーつかむことができます。

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

をしてからscott.venuesなどの会場を取得します。この関係は、db.ReferencePropertyの行に定義されています。これは、someuser.venuesとは何かを定義し、何がsomevenue.userであるかを定義します。

+0

ありがとうございますこれは印刷します: '[email protected] club1 [email protected] club22'ユーザーに質問して会場全体を取得する方法がわからないので、私はEDITを追加しました。 – Zeynel

+0

あなたの答えをありがとう。 – Zeynel