使用Elixir 0.7.1和SQLAlchemy 0.7.8,我创建了一个具有多对多关系的模型,它看起来像:
from elixir import *
class MyModel(Entity):
name = Field(Unicode(30))
related = ManyToMany('MyModel')
现在,如果我对这些有任意查询,请说
q1 = MyModel.query.filter(MyModel.name.like("%Bob%"))
然后我想构建一个单独的查询,该查询将返回与q1
中的任何对象相关的不同MyModel对象的平面列表。也就是说,如果我有
q1.all() == [m1, m2, m3]
然后我想要一个查询q2
(可能带有q1
作为子查询),它将返回一个由m1.related
,m2.related
和{的并集组成的平面列表{1}}。如果我先执行m3.related
然后再下载到其余的Python列表操作,这很容易做到,但是当q1
返回许多对象时,似乎应该有更快的方法。有关如何做到这一点的任何想法?我应该在Elixir生成的中间表上使用某种连接来实现多对多关系吗?
谢谢!
答案 0 :(得分:0)
看起来有一个简单的解决方案,而无需显式引用连接表:
q2 = MyModel.query.join(q1.subquery(), MyModel.related)