3

次のような SQLAlchemy モデルがあります。

class Group(Base):
    __tablename__ = 'groups'

    id = Column(Integer, primary_key = True, ca_include = True)
    name = Column(String, ca_include = True)

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key = True, ca_include = True)
    name = Column(String, ca_include = True)
    group_id = Column(Integer, ForeignKey('groups.id'), nullable = True, ca_include = True)
    group = relationship('Group', ca_include = True)

使用したフォーム ライブラリは、deform です。モデル定義を自動的に Colander スキーマに変換するために、ColanderAlchemyをインストールしました。

form = deform.Form(SQLAlchemyMapping(Group), use_ajax = True)

そして、空のフォームを取得するために form.render() を実行できます。しかし、この空のフォームにレコードを入力するにはどうすればよいでしょうか? 私は試した:

group = Group.get(1)
form.render(group)

しかし、失敗しました。私もこのブログをフォローしましたが、単一のレコードのみを水切りの形式に変換できますが、関係は変換されません。それで... SQLAlchemyレコードをColanderレコードに変換する方法はありますか?

4

1 に答える 1

3

指定された SQLAlchemyMapping スキーマ オブジェクトに関連付けられたメソッドを利用してdictify、指定されたモデル インスタンスを Deform フォームのレンダリングに受け入れられる appstruct に変換する必要があります。

したがって、サンプル モデルを使用すると、次のようになります。

schema = SQLAlchemyMapping(Group)
form = deform.Form(schema, use_ajax=True)
my_group = Group(id=1, name='Foobar') #or query for an instance etc
appstruct = schema.dictify(my_group)
form.render(appstruct)

ColanderAlchemy はこの段階では非常に最先端であるため、特にバージョン 0.2 ではカスタム列と関係型の必要性を取り除くために大幅に書き直されているため、マイレージは新しいバージョンでは異なる可能性があります (上記はバージョン 0.1 用に書かれています)。現在の ColanderAlchemy 0.1b6 リリースには、特に関係のマッピングに関して問題があることに気付きました。

最新バージョンの詳細については、http: //colanderalchemy.rtfd.org/ のドキュメントを参照してください。

于 2012-11-21T05:04:57.353 に答える