SQLAlchemy orden por propiedad híbrida que hace referencia a la relación

Mis modelos de SQLAlchemy:

class Cover(db.Model): # ... a bunch of other fields ... @hybrid_property def number_of_requests(self): if self.requests: return len(self.requests) return 0 @number_of_requests.expression def number_of_requests(cls): return func.count(cls.requests) class Request(db.Model): # ... a bunch of other fields ... # Cover that this request is requesting cover_id = db.Column(db.Integer, db.ForeignKey('cover.id') cover = db.relationship('Cover', backref=backref("requests", cascade="all, delete-orphan")) 

Por lo tanto, una relación simple de uno a muchos entre la cobertura y la solicitud. La propiedad híbrida number_of_requests debe devolver el número de Solicitudes asociadas con esa Cobertura en particular.

Ahora, en una de mis rutas de Flask, estoy tratando de agarrar las 5 mejores Cubiertas por número de Solicitudes. Esto es lo que parece ahora:

 # Get top cover requests covers = Cover.query.order_by(Cover.number_of_requests).limit(5).all() 

Desafortunadamente, esto da

ProgrammingError: (ProgrammingError) falta la entrada de la cláusula FROM en la tabla “solicitud”

Sospecho que esto se debe a que en number_of_requests(cls) estoy tratando de contar el tamaño de la lista de requests pero SQLAlchemy no ha incluido la tabla de solicitudes en la consulta original. ¿Alguna idea sobre cómo hacer eso para evitar obtener este error?

Cambia tu parte de expression a:

 @number_of_requests.expression def number_of_requests(cls): return (select([func.count(Request.id)]) .where(Request.cover_id == cls.id)) 

y Correlated Subquery Relationship Hybrid leer Correlated Subquery Relationship Hybrid .