class Things(db.Model):
__tablename__ = 'things'
id = db.Column(db.Integer, primary_key=True)
things_name = db.Column(db.String(64))
things_list = db.relationship('List', secondary=things_plus_list,
backref=db.backref('list_things', lazy='dynamic'),
lazy='dynamic')
class List(db.Model):
__tablename__ = 'list'
id = db.Column(db.Integer, primary_key=True)
list_name = db.Column(db.String(64), unique=False)
things_plus_list = db.Table('things_plus_list',
db.Column('things_id', db.Integer, db.ForeignKey('things.id')),
db.Column('list_id', db.Integer, db.ForeignKey('list.id')),
db.Column('create_time', db.DateTime, default=datetime.now)
)
以上是看flask时间开发,学习动手搞个小网站,用flask-sqlalchemy构建的数据库模型,「things_plus_list」是一个关系表,表示的是东西(things)和清单(List)的关联关系,目前学会如何查询东西所属的所有清单,也懂得如何查询清单下所有的东西,但有一个实现没有思路,想请大神指点一下思路即可,或者有资料的大神恳请贴一下地址:
实现是:查询出某个清单所有的东西,然后按他们关联起关系的时间倒序排序东西。即关系表「things_plus_list」中有一个字段「create_time」我没有思路怎么利用起来。
请大神指点。解决问题我会私信你索取支付宝,小弟送上30元烟钱请大神抽包烟。
这是我的数据模型,和你的需求大致相同,按照关联表中的时间字段来排序
class Film(db.Model):
'''电影'''
__tablename__ = 'film'
id = db.Column(db.Integer, primary_key=True)
# 电影名字
name = db.Column(db.String, default='')
# 重点在这里......
tag_maps = relationship(
'TagImgMap',
primaryjoin="and_(TagFilmMap.film_img_id==Film.id)",
order_by=lambda: TagFilmMap.date_create.desc() # 按照关联表中的关联时间降序排序
)
# 关联的所有标签(这里的顺序时根据上面排序出来的)
tags = association_proxy('tag_maps', 'tag')
class Tag(db.Model):
'''标签'''
__tablename__ = 'tag'
id = db.Column(db.Integer, primary_key=True)
# 标签名
name = db.Column(db.String(255), default=u'')
# 标签创建时间
date_create = db.Column(db.DateTime, default=datetime.now)
class TagFilmMap(db.Model):
'''标签电影关联表'''
__tablename__ = 'tag_film_map'
id = db.Column(db.Integer, primary_key=True)
# 标签id
tag_id = db.Column(db.Integer, db.ForeignKey('tag.id'))
# 电影id
film_id = db.Column(db.Integer, db.ForeignKey('film.id'))
# 关联时间
date_create = db.Column(db.DateTime, default=datetime.now)
# 使用
filmobj = Film.query.filter(Film.id == 5).first() # 获取电影id为`5`的电影
filmobj.tag_maps # 这里输出的就是要按照指定排序出来的关联数据
filmobj.tags # 这里输出的就是要按照指定排序出来的标签数据
http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html#building-a-many-to-many-relationship
filter后面用order_by()排序