Отфильтровать вложенные данные SQLAlchemy
Пытаюсь получить всех авторов, кто публиковал свои посты (причем у каждого автора должны быть перечислены все его ОПУБЛИКОВАННЫЕ (is_visible=True) посты)
user.py
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
username = Column(String(10), nullable=False, unique=True)
posts = relationship("Post", back_populates="author")
post.py
class Post(Base):
__tablename__ = 'post'
id = Column(Integer, primary_key=True)
name = Column(String(100))
is_visible = Column(Boolean, nullable=False, server_default=text("'1'"))
author_id = Column(ForeignKey("user.id"), nullable=False, index=True)
author = relationship('User', back_populates="posts")
удалось сделать так:
authors = db.query(User).filter(User.posts.any(is_visible=True)).all()
for author in authors:
author.posts = [post for post in author.posts if post.is_visible]
return authors
интересно, а есть ли иной способ без использования циклов?