Как я могу скопировать детей от одного родителя к другому, используя SQLAlchemy ORM? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть две модели 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, назначенным новой карте.Я уверен, что это поведение имеет смысл, но у меня были проблемы с поиском желаемого поведения.

Как скопировать список потомков другому родителю, создать новые строки и сохранить старые?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...