我有一个@hybrid_property
,它引用了一个嵌套关系self.establishment_type.establishment_base_type.name == 'QSR'
。它在assert location.is_qsr == True
中的Location对象上工作,但在过滤器中不起作用。我试过添加一个@is_qsr.expression
函数,但都不能使它们工作。如何启用诸如query(Location).filter(Location.is_qsr == True)
之类的筛选器?在
class Location(Base):
__tablename__ = 'houses'
id = Column(Integer, primary_key=True)
establishment_type_id = Column(
Integer, ForeignKey('establishment_types.id')
)
establishment_type = relationship('EstablishmentType')
@hybrid_property
def is_qsr(self):
if self.establishment_type:
if self.establishment_type.establishment_base_type:
return self.establishment_type.establishment_base_type.name == 'QSR'
return False
class EstablishmentType(Base):
__tablename__ = 'establishment_types'
id = Column(Integer, primary_key=True)
establishment_base_type_id = Column(
Integer, ForeignKey('establishment_base_types.id')
)
establishment_base_type = relationship('EstablishmentBaseType')
class EstablishmentBaseType(Base):
__tablename__ = 'establishment_base_types'
id = Column(Integer, primary_key=True)
您可以在关系上使用^{} :
这并不能产生世界上最有效的查询(它执行
EXISTS (SELECT 1 FROM ...)
),但是一个像样的优化器应该能够解决这个问题。在相关问题 更多 >
编程相关推荐