2016-04-25 3 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') 
    ) 

ここでの目標は、DatasetオブジェクトとUserオブジェクトの間のリレーションを設定することです。後で、現在のユーザーが所有者のリストにあるものだけのデータセットを照会したいと考えています。これは多対多のマッピングなので、私はクエリのようなものを探していますが、何も見つけられないようです。これは私がこれまで持っているものです:

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

私はこのエラーへの参照を見つけることができていない、と私はどのようにして不確実だ:エラーを返し

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

ここに進む。

使用postgresの

答えて

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

9.3あなたは命の恩人です。非常に重大な回避策に訴えていましたが、これは本当の解決策です。これに関する文書はありますか? –

+0

確かに、[any](http://docs.sqlalchemy.org/en/rel_1_0/orm/internals.html#sqlalchemy.orm.properties.RelationshipProperty.Comparator.any)メソッドの元の例。 – van

関連する問題