我有两个模型 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 分配给新地图的旧对象。我确信这种行为是有道理的,但我在寻找我想要的行为时遇到了麻烦。
如何将子列表复制到另一个父级,创建新行并保留旧行?