这是我的模型,球员和俱乐部。由于一个俱乐部可以有很多球员,而一个球员可以有很多俱乐部(在其 carrer 中),我使用了多对多关系:
class Club(db.Model):
name = db.StringProperty()
link = db.StringProperty()
class Player(db.Model):
name = db.StringProperty()
link = db.LinkProperty()
class ClubHasPlayer(db.Model):
club = db.ReferenceProperty(Club, required=True,
collection_name='club_players')
player = db.ReferenceProperty(Player, required=True,
collection_name='player_clubs')
number = IntegerProperty()
现在,我有一个搜索界面,可以搜索所有球员,并添加零个或多个限制,例如球员姓名和他效力的俱乐部。因此,我有一个级联类型的处理:
players = player.all()
if filter_by_player_name:
players.filter("name =",filter_by_player_name)
现在,我想这样做:
if filter_by_club_name:
players.filter(????)
我仍然认为在 SQL 方面,它应该类似于嵌套子句:
select * from player where player.name='x' and player.id in (select club_has_player.player_id from club_has_player, club where club_has_player.club_id = club.id and club_name = "Y")
怎么做?
我知道我可以离开俱乐部,那就是:
club = Club.filter("name=",filter_by_club_name).get() club.club_players
但这种风格丢弃了以前的过滤器,可能是玩家的名字......
有人可以在这里帮助我吗?谢谢。