Monkeypatching は機能しますが (少なくとも sqlalchemy 宣言型モデルでは、Elixir で試したことはありません)、monkeypatching に関するすべての標準的な問題にさらされます (主な問題は、bar への変更が変更されないままであるという保証がないことです)。 . ただし、基本的には機能し、アプリケーションが非常に単純な場合は実行可能なソリューションになる可能性があります.
class Foo(Entity):
bar = Field(Integer, default=-1)
bar.searchable = True
アプリケーションがより複雑である場合、および/または長期間にわたって堅牢で信頼性が高く保守可能である必要がある場合、上記の手法は適していません。理想的には、この追加情報を格納するために別のオブジェクトを導入する必要があります。このオブジェクトは完全に制御可能であり、sqlalchemy がデータ モデル クラスに対して行うすべての舞台裏の処理に翻弄されることはありません。
そのためには、多くの方法があります。簡単な選択の 1 つは、必要なときに簡単に検索できるように、追加情報 (ブール値の「検索可能」プロパティと追加したいものすべて) を保持する単純な構造を作成することです。たとえば、ネストされた dict() を使用して、モデル クラス、フィールド名、およびプロパティ名によってインデックス付けされた任意の数の追加プロパティを格納する非常に単純なクラスを定義します。次に、このクラスのインスタンスを 1 つ作成し、アプリ全体で共有します。
このような構造を設定したら、次のように使用できます。
if extra_props[foo]['bar']['searchable']:
# do something