三个表之间的查询,多对多的关系

时间:2011-08-29 08:01:47

标签: python google-app-engine

我在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()过滤器('hobbies =',篮球).fetch(100)

但是,我被困在那里......任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

我认为你应该在表格中记录发送的邀请,说“invitationsSend”有两个字段:event和attendee,这两个字段正在制作一个唯一的主键。

要构建此功能,您必须选择表格事件和与会者之间的数据:

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

但是我不熟悉用于“爱好”的“db.listProperty”,我不知道如何查看该列表。我应该将此作为一个单独的表格,其中数据为“Attendee,Hobby”,两者都是主键。

此致