列のデフォルトおよびonupdate仕様からトリガーされるコンテキスト依存関数(たとえば、def get_user_full_name())を追加する方法を整理しようとしています。すべてのクエリで2つのフィールドを常に連結する必要がないように、名前と名前を1つのフルネーム値に結合する複合フィールドを設定しようとしています。
私は宣言型アプローチを使用しています。これは、同様のモデルの例です。
class SomeMembers(Base):
__tablename__ = 'some_members'
__table_args__ = {'mysql_engine':'InnoDB'}
SomeGroup = Column(Unicode(50), primary_key=True)
UserID = Column(Unicode(50), primary_key=True)
FullName = Column(Unicode(255), default=get_user_full_name, onupdate=get_user_full_name, index=True)
FirstName = Column(Unicode(255), index=True)
LastName = Column(Unicode(255), index=True)
UserName = Column(Unicode(255))
これは、FirstNameキーとLastNameキーのどちらも有効ではないことをスタックトレースで報告する、私が作成した関数です。
def get_user_full_name(context):
return " ".join((context.compiled_parameters[0]['FirstName'],context.compiled_parameters[0]['LastName']))
2つの列(FirstNameとLastName)の既存のデータを参照して、簡単に取得できるように格納する複合値を作成する方法がわかりません。たとえば、John Doeという名前のユーザーがいる場合、get_user_full_nameメソッドは「John」と「Doe」を取り、「JohnDoe」のフルネーム値を返す必要があります。
ドキュメントでは、context.current_parametersを参照していますが、私の場合は存在しません。宣言型のアプローチを使用しているためだと思います。それが機能した場合、私のget_user_full_name関数は次のようになります。
def get_user_full_name(context):
return " ".join((context.current_parameters['FirstName'],context.current_parameters['LastName']))
これはおそらく些細なことですが、この情報が保存されている場所と動的にアクセスする方法についてコードを解読することはできないようです。
少し洞察をいただければ幸いです。私もよりエレガントなアプローチを受け入れています。
前もって感謝します...
乾杯、
ポール