Как редактировать существующую запись с 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, 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 для автоматического преобразования определения модели в схему Colander:

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

И я могу сделать form.render(), чтобы получить пустую форму. Но как заполнить эту пустую форму с записью? Я старался:

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

Но не удалось. Я также следил за этим блогом, но он может конвертировать только одну запись в формат дуршлаг, но никакие отношения не будут преобразованы. Итак... есть ли у меня возможность преобразовать запись SQLAlchemy в запись Colander?

1 ответ

Решение

Вам нужно будет использовать dictify метод, связанный с указанным объектом схемы SQLAlchemyMapping для преобразования данного экземпляра модели в структуру приложения, приемлемую для визуализации формы Deform.

Итак, используя ваш пример модели, вот что вы можете сделать:

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/ для получения подробной информации о последней версии.

Другие вопросы по тегам