Я создаю веб-приложение с помощью SQLAlchemy и Flask.У меня есть отношение один-ко-многим между двумя сопоставленными объектами.На родительском объекте я хотел бы иметь словарь дочерних объектов (а также свойство коллекции) - это облегчит взаимодействие с другими модулями Python, которые я использую.
Iпопытался использовать украшение @reconstructor
для вызова метода всякий раз, когда загружается родительский объект, в котором я использовал бы словарное понимание для создания нового свойства.Это не удалось, поскольку во время вызова метода коллекция не была заполнена полностью - она содержит только первый элемент, поскольку обработана только одна строка возвращаемых данных.
class Child(Base):
__tablename__ = 'child'
uid = Column(Integer, primary_key=True)
name = Column(String(256))
parent_uid = Column(Integer, ForeignKey('parent.uid'))
parent = relationship('Parent', back_populates='children')
class Parent(Base):
__tablename__ = 'parent'
uid = Column(Integer, primary_key=True)
children = relationship('Child', lazy='joined')
@reconstructor
def init_on_load(self):
self.children_dict = {c.uid : c.name for c in self.children}
MyОбходной путь - просто вызвать init_on_load
вручную сразу после загрузки объекта, но это очень не элегантно.Есть ли какое-либо событие, которое я могу связать, чтобы достичь этого?Я бы хотел, чтобы он назывался как можно позже, т.е.непосредственно перед session.query(Parent).filter(Parent.uid == parent_uid).first()
возвращает значение.