У меня есть две модели Map и Image.Ради простоты я просто поставлю под сомнение отношения:
class Map(Model):
__tablename__ = 'maps'
id = Column(
Integer,
primary_key=True
)
images = relationship(
'Image',
uselist=True,
cascade='all, delete-orphan',
passive_deletes=True
)
class Image(Model):
__tablename__ = 'images'
id = Column(
Integer,
primary_key=True
)
map_id = Column(
Integer,
ForeignKey(
'maps.id',
onupdate='CASCADE',
ondelete='CASCADE'
),
index=True,
nullable=False
)
map = relationship(
'Map',
back_populates='images'
)
Я пытался скопировать изображения из одного экземпляра модели в другой, как это
new_map = Map()
# do some stuff
old_map = Map.query.get(some_id)
new_map.images = old_map.images
session.add(new_map)
session.commit()
Это имелонеожиданное поведение (для меня) изменения столбца map_id в исходных строках таблицы вместо создания нового объекта, который является копией, или старого объекта с map_id, назначенным новой карте.Я уверен, что это поведение имеет смысл, но у меня были проблемы с поиском желаемого поведения.
Как скопировать список потомков другому родителю, создать новые строки и сохранить старые?