我正在尝试构建一个查询,该查询返回所有具有匹配指定条件的孩子的对象。诀窍是有多个相互排斥的标准,因此必须有多个孩子。我不确定如何表达这一点。
模型:
class Message(Base):
__tablename__ = 'Message'
class MessageRecipient(Base):
__tablename__ = 'MessageRecipient'
recipient_id = Column(Integer, ForeignKey('User.uid'))
message_id = Column(Integer, ForeignKey('Message.uid'))
user = relationship('User', backref="messages_received")
message = relationship('Message', backref="recipients")
我想获取所有正在发送给定义的用户集的消息。例如,我想返回发送给用户1
和2
的所有消息,而不是发送给用户1
或仅发送给用户2
的消息。它必须已发送给两个用户!
我正在尝试以下查询:
query = Message.query.filter(Message.recipients.any(MessageRecipient.recipient_id.in_([1,2])))
以上是不起作用的,因为in_
是分析的。它确实返回了我想要的消息,但也返回消息i not 想要。
有人知道我如何构建需要Message
具有带有任意ID的MessageRecipients
的查询?
我通过在集合中的所有对象上迭代并使用exists()
为每个对象创建一个新子查询来解决此问题。不确定这是否是最有效的方法,但它起作用。
for recipient in [1,2]:
query = query.filter(MessageRecipient.query.filter(and_(MessageRecipient.recipient_id== recipient,
MessageRecipient.message_id == Message.uid)).exists())