Существует хорошее объяснение отношений «один ко многим» в хранилище данных here от Rafe Kaplan. Я попытался адаптировать это к более простому случаю 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="[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]"
с местом, он пошел к; поэтому я хочу, чтобы напечатать что-то вроде: "[email protected]: 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: ответ на vonPetrushev)
Это похоже на работу:
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)
Дисплеи:
[email protected] went to:club1club22
EDIT (Re: ответ на vonPetrushev)
Я немного смущен.
Так что я хочу написать запрос, как этот
query = User.all()
query.filter("userEmail =", "[email protected]")
и отобразить все места, связанные с этим пользователем.
Непонятно, как связаны User
и Venue
.
Спасибо, что работает и печатает: `[email protected] club1 [email protected] club22` Я добавил «EDIT», потому что я не понимаю, как запросить пользователя и получить все его места. – Zeynel 2010-11-27 18:51:16