これは私のモデル、プレイヤーとクラブです。クラブは多くのプレーヤーを持つことができ、プレーヤーは(そのキャリア内で)多くのクラブを持つことができるので、私は多対多の関係を使用しました:
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()
これで、すべてのプレーヤーを検索し、プレーヤー名や彼がプレーしたクラブなど、0個以上の制限を追加できる検索インターフェイスができました。したがって、これを処理するカスケードタイプがあります。
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
ただし、このスタイルでは、プレーヤー名である可能性のある前のフィルターが破棄されます。
誰かがここで私を助けることができますか?ありがとう。