我有两个模型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。我敢肯定这种行为是有道理的,但是我在寻找自己想要的行为时遇到了麻烦。
如何将孩子列表复制到另一父母,创建新行并保留旧行?