У меня есть 4 таблицы: Гибридный выражение, которое подсчитывает число строк с условием
class Cebola(Base):
__tablename__ = 'cebolas'
id = Column(Integer, primary_key=True, autoincrement=True)
class Checklist(Base):
__tablename__ = 'checklists'
id = Column(Integer, primary_key=True, autoincrement=True)
checklist_type = Column(String)
cebola_id = Column(Integer, ForeignKey('cebolas.id'))
cebola = relationship('Cebola', backref=backref('checklists'))
__mapper_args__ = {'polymorphic_on': checklist_type,
'polymorphic_identity': 'generic'}
class ChecklistA(Checklist):
__tablename__ = 'checklist_a'
id = Column(Integer, ForeignKey('checklists.id', ondelete='CASCADE'), primary_key=True)
notes = Column(Unicode)
__mapper_args__ = {'polymorphic_identity': 'a'}
class ChecklistB(Checklist):
__tablename__ = 'checklist_b'
id = Column(Integer, ForeignKey('checklists.id', ondelete='CASCADE'), primary_key=True)
notes = Column(Unicode)
__mapper_args__ = {'polymorphic_identity': 'b'}
Теперь мне нужен способ (возможно, гибридная собственность), который скажет мне, сколько контрольных списков я имею в Cebola с notes <> ''
.
Я добавил:
class Cebola(Base):
@hybrid_property
def number_of_comments(self):
return len([c for c in self.checklists if c.notes])
@number_of_comments(cls)
def number_of_comments(cls):
???
я нашел подобную проблему в SQLAlchemy - Writing a hybrid method for child count, но мой пример немного сложнее.
А как бы вы хотели, чтобы обрабатывать 'Checklist' родовые экземпляры, которые не имеют' notes' собственности? – van
@van они могут быть проигнорированы – amleczko