J'utilise SQLAlchemy 0.5rc, et je voudrais ajouter un filtre automatique à une relation, de sorte que chaque fois qu'il essaye d'aller chercher des enregistrements pour cette relation, il ignore les "distants" s'ils sont marqués comme "logically_deleted" (un champ booléen de la table enfant)Comment ajouter un filtre automatique à une relation avec SQLAlchemy?
Par exemple, si un objet "parent" a une relation "enfants" qui a 3 enregistrements, mais l'un d'entre eux est supprimé logiquement, lorsque je demande " Parent "Je voudrais SQLA à chercher l'objet parent avec seulement deux enfants ..
Comment dois-je faire? En ajoutant une condition "et" au paramètre primaire de la relation? (Par exemple, « Children.parent_id == Parent.id and Children.logically_deleted == False
», mais est-il correct d'écrire « et » de cette façon?)
Edit:
J'ai réussi à le faire de cette façon
children = relation("Children", primaryjoin=and_(id == Children.parent_id, Children.logically_deleted==False))
, mais est-il un moyen utiliser une chaîne comme primaryjoin à la place?
Est-ce que cela peut être traduit en utilisant __mapper_args__? Je veux dire que j'utilise déclaratif. – Marconi
J'ai essayé de l'utiliser dans mapper_args, mais je reçois un message d'erreur disant "mapper() a plusieurs valeurs pour l'argument mot clé 'local_table'". Donc j'ai peur que ce soit inutile. –