我有一个像这样的 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)

我使用的表单库是变形。我安装了 ColanderAlchemy 以将模型定义自动转换为滤锅架构:
form = deform.Form(SQLAlchemyMapping(Group), use_ajax = True)

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

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

最佳答案

您需要利用与给定的 SQLAlchemyMapping 架构对象关联的 dictify 方法将给定的模型实例转换为可接受的应用程序结构,以呈现您的变形表单。

因此,使用您的示例模型,您可以这样做:

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/ 上的文档。

关于sqlalchemy - 如何使用 ColanderAlchemy 编辑现有记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13216761/

10-12 21:24