2011-08-29 95 views
1

我在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)

但是,我卡在那裏...任何幫助將非常感激。

+0

你怎麼卡住了?你實際上沒有描述任何問題。 –

回答

1

我認爲你應該在表格中記錄發送的邀請,比如說帶有兩個字段的「invitationsSend」:事件和參與者,這兩個字段都是唯一的主鍵。

要構建這個,你必須同時選擇你的表事件和與會者之間的數據:

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

但我不熟悉的用於「愛好」你的「db.listProperty」和我不知道如何查看該列表。我應該把它作爲一個單獨的表格,將數據「參加者,業餘愛好」作爲主要關鍵。

Regards,