다음 코드는 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 객체가 Message.created에 의해 정렬되지 않습니다. 관계를 선언하면서
나는이 문제를 해결할 수 있습니다 :
messages = relationship('Message', backref='thread', lazy='dynamic',
order_by='Message.created.desc()')
그러나이 차라리하지 않을 것입니다 무언가이다. 내 쿼리를 선언하는 동안 이것을 명시 적으로 설정해야합니다.
또한 호출 할 수
threads[0].messages.reverse()
을이 신사 템플릿에서 매우 불편 ..하지만.
조인 된 모델에 대해 order_by를 설정하는 좋은 해결책이 있습니까?
정확합니다. 순서 지정 메소드를 템플릿 (여기서는 스레드 객체를 반복)에 전달하는 것이 가장 좋은 방법은 아니지만 작동합니다. – kerma