Orm &引用;“扩大”;炼金术中的反身多对多关系

Orm &引用;“扩大”;炼金术中的反身多对多关系,orm,sqlalchemy,python-elixir,Orm,Sqlalchemy,Python Elixir,使用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%")) 然后

使用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
m3.related
的并集组成。如果我只是先执行
q1
,然后再下拉到Python列表操作,这很容易做到,但是当
q1
返回许多对象时,似乎应该有一种更快的方法。你有什么想法吗?我应该在Elixir为多对多关系生成的中间表上使用某种联接吗


谢谢

看起来有一个简单的解决方案,无需显式引用联接表:

q2 = MyModel.query.join(q1.subquery(), MyModel.related)