0
以下代碼適用於Flask-SQLAlchemy,但在SQLAlchemy中會非常相似。如何在查詢執行時對關係對象進行排序
我有兩個簡單的類:
class Thread(db.Model):
id = db.Column(db.Integer, primary_key=True)
subject = db.Column(db.String)
messages = db.relationship('Message', backref='thread', lazy='dynamic')
class Message(db.Model):
id = db.Column(db.Integer, primary_key=True)
created = db.Column(db.DateTime, default=datetime.utcnow())
text = db.Column(db.String, nullable=False)
我想查詢所有線程,並通過他們創建的最後消息有序。這很簡單:
threads = Thread.query.join(Message).order_by(Message.created.desc()).all()
線程現在是一個我可以迭代的正確排序的列表。但是,如果我遍歷 threads[0].messages
則消息對象不按Message.created降序排序。
同時宣佈的關係,我可以解決這個問題:
messages = relationship('Message', backref='thread', lazy='dynamic',
order_by='Message.created.desc()')
不過這是後話,我寧願不做。我希望在聲明我的查詢時明確地設置它。
我也可以撥打:
threads[0].messages.reverse()
..但是這是在神社模板頗爲不便。
爲加入模型設置order_by是否有一個很好的解決方案?
你是對的。將排序方法傳遞給模板(我在其中迭代線程對象)並不是最好的方式,但它可以工作。 – kerma