@declared_attr def parent_id(cls): return column_property(Column( Integer, ForeignKey('%s.id' % cls.__tablename__, ondelete='CASCADE'), info={'colanderalchemy': {'title': FB_PARENT, 'widget': SelectWidget(values = cls.form_widget_dump())} } ))
***form_widget_dump() - это внутренняя функция, получающая дерево в виде списка кортежей, я получаю ее в запросе, но как я понимаю, мапер на данном не сформирован (я вызываю ее в процессе маппинга), поэтому исключение:
sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got ‘<class ’wupy.models.Wupy_menu'>'
Хорошо, делаю через __declare_last__ (вызывается после маппинга, просто):
@declared_attr def parent_id(cls): return column_property(Column( Integer, ForeignKey('%s.id' % cls.__tablename__, ondelete='CASCADE'), info={'colanderalchemy': {'title': FB_PARENT} } ))
@classmethod def __declare_last__(cls): super(WupyTreeMixin1, cls).__declare_last__() cls.__table__.c.parent_id.__dict__['info']['colanderalchemy']['widget'] = SelectWidget(values = cls.form_widget_dump())
Это работает, но! Если меняется дерево (удаляются, добавляются данные), содержимое SelectWidget остается прежним, помогает только перезапуск приложения…
Подскажите, как быть..