2016-04-25 101 views
1

因此,情况如下。我有一个多对多的用户和文件字段。这里的基本代码:通过关系在SQLAlchemy中过滤

owners_datasets = db.Table(
    'owners_datasets', 
    db.Column('user_id', db.Integer(), db.ForeignKey(
     'user.id', ondelete='CASCADE')), 
    db.Column('dataset_id', db.Integer(), db.ForeignKey(
     'dataset.id', ondelete='CASCADE')) 
) 

class User(UserJsonSerializer, UserMixin, db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    ... 

class Dataset(DatasetJsonSerializer, db.Model): 
    id = db.Column(db.Integer(), primary_key=True) 
    ... 
    owners = db.relationship(
     'User', 
     secondary=owners_datasets, 
     backref=db.backref('collections', lazy='dynamic') 
    ) 

我的目标是建立一个数据集对象和用户对象之间的关系。稍后,我想查询当前用户位于所有者列表中的数据集。由于这是一个多对多的映射,我正在寻找类似查询的东西,但我似乎无法找到任何东西。这是我已经得到了迄今:

datasets = Dataset.query.filter_by(Dataset.owners.any(current_user)) 

返回错误:

AttributeError: 'User' object has no attribute '_annotate' 

我一直没能找到这个错误的任何引用,我不确定如何用在这里继续。

使用的是Postgres 9.3

回答

2
Dataset.query.filter(Dataset.owners.any(User.id==current_user.id)) 
+0

你是一个生命的救星。正在采取非常彻底的解决方法,这是一个真正的解决方案。有没有关于此的文档? –

+0

当然,在[任何](http://docs.sqlalchemy.org/en/rel_1_0/orm/internals.html#sqlalchemy.orm.properties.RelationshipProperty.Comparator.any)方法中的原始示例。 – van