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。我安装了ColanderAlchemy以自动将模型定义转换为 Colander Schema:

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

我可以做 form.render() 来得到一个空的表格。但是如何用记录填写这个空表格呢?我试过:

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

但是失败了。我也关注了这个博客,但它只能将单个记录转换为滤锅的格式,但不会转换任何关系。那么...无论如何我可以将 SQLAlchemy 记录转换为滤锅记录吗?

4

1 回答 1

3

您需要利用dictify与给定 SQLAlchemyMapping 模式对象关联的方法将给定模型实例转换为可用于呈现 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.1 版编写的),特别是因为它正在被大量重写以消除对 0.2 版中自定义列和关系类型的需求。我注意到当前的 ColanderAlchemy 0.1b6 版本存在问题——尤其是在关系映射方面。

有关最新版本的详细信息,请参阅http://colanderalchemy.rtfd.org/上的文档。

于 2012-11-21T05:04:57.353 回答