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の
9.3あなたは命の恩人です。非常に重大な回避策に訴えていましたが、これは本当の解決策です。これに関する文書はありますか? –
確かに、[any](http://docs.sqlalchemy.org/en/rel_1_0/orm/internals.html#sqlalchemy.orm.properties.RelationshipProperty.Comparator.any)メソッドの元の例。 – van