【发布时间】:2017-06-28 05:34:33
【问题描述】:
我正在使用 SQLAlchemy,并且我有一个业务规则:“如果他们的所有 Bar 孩子都准备好了,Foo 就准备好了”,在一个用例中,我需要准备好所有 Foo,所以我正在尝试执行以下操作查询:
Session.query(Foo).filter(Foo.is_ready())
但我遇到了异常:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/orm/attributes.py", line 185, in __getattr__
return getattr(self.comparator, key)
AttributeError: 'Comparator' object has no attribute 'all'
模型
class Foo(Base):
bars = relationship(Bar, lazy = "dynamic")
@classmethod
def is_ready(self):
return len(self.bar.all()) == len(self.bars.filter(Bar.status == "ready"))
class Bar(Base):
status = Column(String)
foo_id = Column(Integer, ForeignKey("foo.id"))
我做错了什么?我真的需要实现一个 Foo.is_ready() 方法,因为未来的业务规则会更复杂,所以封装该行为以便以后重用很重要
【问题讨论】:
标签: python sqlalchemy