当我使用SQLAlchemy排序列表时,我正在尝试更新现有对象的顺序。这是SQLAlchemy docs中使用的示例模型:
class Slide(Base):
__tablename__ = 'slide'
id = Column(Integer, primary_key=True)
name = Column(String)
bullets = relationship("Bullet", order_by="Bullet.position",
collection_class=ordering_list('position'))
class Bullet(Base):
__tablename__ = 'bullet'
id = Column(Integer, primary_key=True)
slide_id = Column(Integer, ForeignKey('slide.id'))
position = Column(Integer)
text = Column(String)
我知道如何使用新对象调用append()
,并且效果很好。
但是如何更新现有对象的顺序?
我已经尝试过了,结果有些难以理解。
existing_item = session.query(Bullet).filter(Bullet.id == bullet_id).one()
slide.bullets.insert(new_order, existing_item)
slide.bullets.reorder()
session.commit()
似乎没有任何文档可以解释如何更新现有对象。我想念什么吗?
答案 0 :(得分:0)
我想我明白了。重新插入之前,我需要在有问题的对象上调用remove()
。
不确定是否有更好的方法,但这行得通。
existing_item = session.query(Bullet).filter(Bullet.id == bullet_id).one()
slide.bullets.remove(existing_item)
slide.bullets.insert(new_order, existing_item)
slide.bullets.reorder()
session.commit()
还值得注意的是:我正在使用count_from=1
,因此要求我从new_order
中减去1,以便最终用户不会被以0开始的订单所困扰。