Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 10, 2013 09:33:24

iaa
Зарегистрирован: 2013-09-10
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

SqlAlchemy изменение поля после маппинга

Здравствуйте. Вопрос по SqlAlchemy. Есть миксин для модели, в нем атрибут (declared_attr) parent_id, если делаю так:

@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 остается прежним, помогает только перезапуск приложения…
Подскажите, как быть..

Офлайн

#2 Сен. 10, 2013 14:00:34

iaa
Зарегистрирован: 2013-09-10
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

SqlAlchemy изменение поля после маппинга

Никто не знает, не сталкивался?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version