Если у нас есть две модели sqlalchemy, где у дочерней модели есть флаг удаления:
class Parent(Base):
__tablename__ = 'parent'
id = Column(Integer, primary_key=True)
children = relationship('Child', primaryjoin='and_(Parent.id==Child.parent_id, not_(Child.is)deleted))')
class Child(Base):
__tablename__ = 'child'
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForegnKey('parent.id'), nullable=False)
is_deleted = Column(Boolean, default=False)
parent = relationship(Parent)
Когда я удаляю child
из parent
с:
parent.children.remove(child)
SQLAlchemy устанавливаетchild.parent_id
до NULL.Есть ли способ удалить дочерний элемент из списка children
родителей, но сохранить parent_id
?Прямо сейчас я делаю:
child.is_deleted = True
session.flush()
session.refresh(parent)
, который удаляет child
из списка children
, но, может быть, есть лучший способ?