Tout d'abord, désolé s'il s'avère que ce que j'essaie de faire est la fissure de fumée ici, je ne suis en aucun cas un expert DB ou SQLA. =)SQLAlchemy, filtrage des requêtes jointes avec l'héritage de table
J'ai deux classes, Personne et Organisation, qui utilisent l'héritage de table pour hériter de Contact. (Person.id est un fkey à Contact.id), qui fonctionne bien.
Je souhaite effectuer une recherche dans un champ de recherche et obtenir une liste de tous les contacts. Normalement, quand je suis après une série de choses, je fais ceci:
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
Et puis ailleurs la requête est exécuté. Le problème est que je veux récupérer une liste d'objets contact, mais je veux filtrer sur Organization.name, Person.name_last, et Person.name_first, tous à partir des valeurs tapées dans la case 'nom' de la recherche forme. Je n'arrive pas à comprendre comment faire cela avec une requête, je ne sais pas si c'est possible. Je voudrais cependant éviter d'avoir deux requêtes séparées avec des résultats entrelacés.
Y a-t-il du kung fu filtrant qui me permettrait de faire ce qui précède? à savoir
- retourner tous les contacts:
- ont name_last ou name_first match si le contact est une personne
- avoir match de nom, si le contact est une organisation
Remerciements
Iain