2016-04-17 8 views
0

私はUser(親)とCorporateUser(子)モデルを持っています。結合ベースの継承を使用しています。 Userのpolymorphic_identityは"user"であり、CorporateUserの1つは"corporate_user"です。
私が持っているこの
User.query.filter(User.name.like("%"+search_text+"%"))
のようなクエリでは、それが唯一のタイプCorporateUserのオブジェクトを返します。このクエリ何かに「チェーン」することは可能ですか?
現在、私は別のものを追加していますUser.query.filter(User.name.like("%"+search_text+"%")).filter(User.type == 'corporate_user') これはあまり優雅ではありません。サブタイプに基づくSqlalchemyフィルター

私はちょうどできることを知っていますCorporateUser.query.filter(User.name.like("%"+search_text+"%"))
しかし、私は最初のクエリのフィルタが与えられているということです。

ありがとうございました。

答えて

0

.with_entities()がお手伝いします。 CorporateUserが正確に返されるのではなく、定義したフィールドだけが返されます。

query = User.query.filter(User.name.like("%"+search_text+"%")) \ 
    .filter(User.type == 'corporate_user') \ 
    .with_entities(User.corporate_user) 

クエリ結果の各項目は、エンティティが定義されたタプルになります。

もちろん、モデルにはUser.corporate_userのバックリファレンスが必要です。あなたの質問に基づいて、私はあなたがそれを持っているかどうかは分かりません。

+0

これを今すぐ見て - 謝罪してください。私は、 "基本" GenericUserと2つのサブクラス(NormalUserとCorporateUser)を持つことになりました。現在、クエリはずっと簡単です。 また、私が取ったアプローチは.filterの後に.join(CorporateCustomer)を置くことで、名前フィルタが適用され、次にCorporateCustomersだけが返されるようにします。 –

関連する問題