Форум сайта python.su
Есть довольно глубокая иерархия классов, которую хочется отобразить на одну таблицу. При этом некотрые атрибуты должны мапится только у листовых классов. Немогу найти способ это сделать :( Через include_properties и exclude_properties достичь этого не получается
Офлайн
Давай так, ты изложи проблему не касаясь SQLAlchemy. Т.е. приведи модель иерархии, таблицу, как ты хочешь чтобы классы иерархии отображались в таблицу, как атрибуты соотносятся с колонками таблицы, лучше с примерами. А мы попробуем придумать, как в такой ситуации что-нибудь сделать с SQLAlchemy.
P.S. Очень часто бывает так, что подробно, с примерами изложив проблему, ты сам приближаешься к ответу на вопрос :) Эффект “резиновой уточки” :)
Отредактировано (Сен. 24, 2008 16:24:41)
Офлайн
Есть такая иерархия:
Объект недвижимости
Земельный участок
Строение
Комплекс
Здание
Этаж
Помещение
идентификатор
тип
код
описание
владелец
особые условия
площадь
высота потолка
этажность
...
Отредактировано (Сен. 25, 2008 12:03:33)
Офлайн
Ситуация такая. Если у базового класса есть атрибуты, сопоставленные с колонками таблицы, то их не уберешь из детей.
Пример: http://dumpz.org/2665/ В этом примере у экземпляров Structure не будет атрибута storeys_number, но у экземпляров Room будут атрибуты и storeys_number и ceiling_height, за счет того, что оба эти атрибута есть у его родителя - Bulding.
Собсно демонстрация:
>>> from rlt import *
>>> make_engine()
<<< Engine(sqlite:///rlt.db)
>>> create_sample_data()
>>> r0 = Room.query.first()
>>> r0.ceiling_height
<<< 2.7000000000000002
>>> r0.storeys_number
>>> s0 = Structure.query.first()
>>> s0.storeys_number
>>> s0.ceiling_height
---------------------------------------------------------------------------
<type 'exceptions.AttributeError'> Traceback (most recent call last)
/home/j2a/<ipython console> in <module>()
<type 'exceptions.AttributeError'>: 'Structure' object has no attribute 'ceiling_height'
Офлайн
j2aНу мне как раз надо было убрать из родителей :) Огромное спасибо, exclude_properties - работает, хотя и не очень удобно в использовании. Еще раз спасибо, особенно за код. Жаль рейтинг не работает.
Ситуация такая. Если у базового класса есть атрибуты, сопоставленные с колонками таблицы, то их не уберешь из детей.
Офлайн