Запрос между тремя таблицами, отношения многие ко многим - PullRequest
1 голос
/ 29 августа 2011

У меня есть три базы данных в GAE. Хобби, Посетитель и Событие.

class Hobby(db.Model):
    name = db.StringProperty()


htest = Hobby.get_or_insert('tennis')
htest.name = 'tennis'
htest.put()
htest = Hobby.get_or_insert('basketball')
htest.name = 'basketball'
htest.put()
htest = Hobby.get_or_insert('food')

class Event(db.Model):
   title = db.StringProperty(required=True)
   description = db.TextProperty()
   time = db.DateTimeProperty()
   location = db.TextProperty()
   creator = db.UserProperty()
   edit_link = db.TextProperty()
   gcal_event_link = db.TextProperty()
   gcal_event_xml = db.TextProperty()
   hobby = db.ReferenceProperty(Hobby)

class Attendee(db.Model):
   email = db.StringProperty()
   hobbies = db.ListProperty(db.Key)
   event = db.ReferenceProperty(Event)

Каждый Участник может выбрать столько хобби, сколько пожелает. Когда событие создается, пользователь выбирает хобби, с которым нужно связать событие, и каждому участнику, выбравшему это хобби, будет отправлено приглашение. Hobby DB - это предварительно загруженная база данных.
Я хочу сделать запрос, который делает это.

после прочтения блога Ника http://blog.notdot.net/2010/10/Modeling-relationships-in-App-Engine это было очень полезно, я чувствую, что должен использовать метод, который был упомянут там

посетители = фильтр Attendee.all () ('хобби =', баскетбол) .fetch (100)

Однако, я застрял там ... любая помощь будет очень признательна.

1 Ответ

1 голос
/ 29 августа 2011

Я думаю, что вы должны записать приглашения, отправленные в таблицу, скажем «invitationsSend» с двумя полями: событие и участник, два поля которых составляют уникальный первичный ключ.

Для создания этого у вас будетчтобы выбрать данные как между вашими таблицами событий, так и посетителями:

insert into invitationsSend(select E.Event, A.Attendee from Event as E, Attendee as A where E.Hobby = A.Hobby)

Но я не знаком с вашим "db.listProperty", используемым для "хобби", и я не знаю, как просмотреть этот список,Я должен сделать это как отдельную таблицу с данными "Attendee, Hobby", оба в качестве первичного ключа.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...