我有一个模型和一个为模型本身定义的关系(Parent-Child)。有一个order_by属性设置为模型中的关系。如下所示:
from app import db
class ModelA(db.Model):
__tablename__ = 'activities'
id = db.Column(db.Integer, primary_key=True)
startdate = db.Column(db.Date())
sort_id = db.Column(db.Integer)
parent_id = db.Column(db.Integer, db.ForeignKey('activities.id'))
children = db.relationship("ModelA", cascade="all,delete-orphan", backref=db.backref('parent', remote_side=[id]),order_by='ModelA.sort_id')
现在,我有查询来获取ModelA中的所有记录及其子项eagerloaded。唯一的问题是,在此特定查询中,必须根据startdate而不是sort_id对子项进行排序。查询如下:
a_alias = aliased(ModelA)
activities = ModelA.query.outerjoin(a_alias, ModelA.children).options(
contains_eager(ModelA.children, alias=a_alias)).filter(ModelA.projectId == project_id).\
order_by(nullsfirst(ModelA.parent_id), ModelA.startdate, a_alias.startdate).all()
但是,这个查询不会排序急切加载startdate的子关系。它仍然基于模型中定义的sort_id进行排序。我该怎么做才能克服这个问题?