1

我有两个模型 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 分配给新地图的旧对象。我确信这种行为是有道理的,但我在寻找我想要的行为时遇到了麻烦。

如何将子列表复制到另一个父级,创建新行并保留旧行?

4

0 回答 0