Sqlalchemy 如何使用ColanderAlchemy编辑现有记录?

Sqlalchemy 如何使用ColanderAlchemy编辑现有记录?,sqlalchemy,colander,colanderalchemy,Sqlalchemy,Colander,Colanderalchemy,我有这样一个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,

我有这样一个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模式:

form = deform.Form(SQLAlchemyMapping(Group), use_ajax = True)
我可以使用form.render()得到一个空表单。但是如何用记录来填写这张空表呢? 我试过:

但失败了。 我也遵循了这一点,但它只能将单个记录转换为colander的格式,但不会转换任何关系。
所以我是否需要将SQLAlchemy记录转换为Colander记录?

您需要使用与给定SQLAlchemyMapping模式对象关联的
dictify
方法将给定模型实例转换为可用于渲染变形表单的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版本存在一些问题,特别是在关系映射方面

有关最新版本的详细信息,请参阅中的文档

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)