Есть хорошее объяснение отношений 1-ко-многим в хранилище данных здесь от Рэйфа Каплана. Я попытался приспособить это к более простому случаю User
и Venue
. Таким образом, пользователь может пойти во многие рестораны; и я хочу напечатать электронную почту пользователя и рестораны, в которые пользователь пошел:
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="scott@example.com")
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"
Но я хочу связать "scott@example.com"
с местами, куда он ходил; поэтому я хочу напечатать что-то вроде: "scott@example.com: club1, club2"
Попытка
for v in scott.venues:
self.response.out.write(userEmail)
self.response.out.write(v.venue)
выдает ошибку:
self.response.out.write(userEmail)
NameError: global name 'userEmail' is not defined
Как правильно это сделать? Спасибо!
EDIT2 (re: answer by vonPetrushev)
Кажется, это работает:
query = User.all()
query.filter("userEmail =", "scott@example.com")
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)
Отображение:
scott@example.com went to:club1club22
РЕДАКТИРОВАТЬ (re: answer by vonPetrushev)
Я немного растерялся.
Итак, я хочу написать запрос, подобный этому
query = User.all()
query.filter("userEmail =", "scott@example.com")
и отобразить все места, связанные с этим пользователем.
Непонятно, как User
и Venue
связаны.