我在SQLAlchemy中有一个association对象,它有另外两个对象的一些额外信息(实际上是一个字段)。在
第一个对象是Photo
模型,第二个对象是PhotoSet
,关联对象称为PhotoInSet
,它拥有position
属性,它告诉我们当前Photo
在当前的PhotoSet
中处于什么位置。在
class Photo(Base):
__tablename__ = 'photos'
id = Column(Integer, primary_key=True)
filename = Column(String(128), index=True)
title = Column(String(256))
description = Column(Text)
pub_date = Column(SADateTime)
class PhotoInSet(Base):
__tablename__ = 'set_order'
photo_id = Column(Integer, ForeignKey('photos.id'), primary_key=True)
photoset_id = Column(Integer, ForeignKey('photo_set.id'), primary_key=True)
position = Column(Integer)
photo = relationship('Photo', backref='sets')
def __repr__(self):
return '<PhotoInSet %r>' % self.position
class PhotoSet(Base):
__tablename__ = 'photo_set'
id = Column(Integer, primary_key=True)
name = Column(String(256))
description = Column(Text)
timestamp = Column(SADateTime)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship('User', backref=backref('sets', lazy='dynamic'))
photo_id = Column(Integer, ForeignKey('photos.id'))
photos = relationship('PhotoInSet', backref=backref('set', lazy='select'))
创建一个新的PhotoSet
保存position
并创建关系(大致)如下所示:
但是当顺序改变时,我在尝试如何更新position
时遇到了很多麻烦。在
如果我有3个id为1、2和3、位置分别为1、2和3的3Photo
对象,在创建之后会是这样的:
>>> _set = PhotoSet.get(1)
>>> _set.photos
[<PhotoInSet 1>, <PhotoInSet 2>, <PhotoInSet 3>]
如果顺序改变了,(让我们在这个例子中颠倒顺序),SQLAlchemy是否可以帮助我更新position
值?到目前为止,我对我能想出的任何方法都不满意。在
最简洁的方法是什么?在
看看Ordering List扩展名:
我相信你可以把你的计划改成:
这个脚本的结果。。。在
^{pr2}$你在评论中说。。。在
我怀疑这是真的。在
相关问题 更多 >
编程相关推荐