Я работаю над определением своего сопоставления с помощью SQLAlchemy, и я почти закончил, за исключением одной вещи.
У меня есть объект 'ресурс' и таблица отношений 'отношение' с несколькими свойствами и отношения между двумя ресурсами.
До сих пор я пытался сделать это почти успешно, чтобы предоставить объекту ресурса 2 свойства: parent и children для обхода дерева, хранящегося в таблице сопоставлений.
Отношение между двумя свойствами длится некоторое время, поэтому есть дата начала и окончания. Только один ресурс может быть одновременно родителем другого ресурса.
Моя проблема в том, что если я истекаю одно отношение и создаю новое, родительское свойство не обновляется. Я думаю, может быть, есть проблема с primaryjoin для родительского свойства ресурса.
Вот код:
resource_table = model.tables['resource']
relation_table = model.tables['resource_relation']
mapper(Resource, resource_table,
properties = {
'type' : relation(ResourceType,lazy = False),
'groups' : relation(Group,
secondary = model.tables['resource_group'],
backref = 'resources'),
'parent' : relation(Relation, uselist=False,
primaryjoin = and_(
relation_table.c.res_id == resource_table.c.res_id,
relation_table.c.end_date > func.now())),
'children' : relation(Relation,
primaryjoin = and_(
relation_table.c.parent_id == resource_table.c.res_id,
relation_table.c.end_date > func.now()))
}
)
mapper(Relation, relation_table,
properties = {
'resource' : relation(Resource,
primaryjoin = (relation_table.c.res_id == resource_table.c.res_id)),
'parent' : relation(Resource,
primaryjoin = (relation_table.c.parent_id == resource_table.c.res_id))
}
)
oldrelation = resource.parent
oldrelation.end_date = datetime.today()
relation = self.createRelation(parent, resource)
# Here the relation object has not replaced oldrelation in the resource object
Есть идеи?
Спасибо
Ричард Лопес