まず最初に、私がやろうとしていることがスモーク クラックであることが判明した場合は申し訳ありません。私は決して DB や SQLA の専門家ではありません。=)
テーブル継承を使用して Contact から継承する Person と Organization の 2 つのクラスがあります。( Person.id は Contact.id の fkey です)、正常に動作しています。
検索ボックスから検索して、すべての連絡先のリストを取得したい。通常、一連のことをしたいときは、次のようにします。
def build_query(self):
return self.session.query(Person)
def filter_query(self, query)
if self.search_form_values.get('name_last',None):
query = query.filter(
Person.name_last==self.search_form_values.get('name_last')
)
...
return query
そして、他の場所でクエリが実行されます。問題は、連絡先オブジェクトのリストを取得したいのですが、検索フォームの「名前」ボックスに入力された値から、すべて Organization.name、Person.name_last、および Person.name_first でフィルタリングしたいことです。1 つのクエリでこれを行う方法がわかりません。それが可能かどうかもわかりません。ただし、結果がインターリーブされた 2 つの個別のクエリを使用することは避けたいと思います。
上記を可能にするフィルタリングカンフーはありますか?すなわち
- 次のすべての連絡先を取得します。
- 連絡先が個人の場合、name_last または name_first が一致する
- 連絡先が組織の場合、名前が一致している
ありがとう
イアン