Flask-SQLAlchemy:通过一个关系进行多个过滤器

2024-01-11

我有两个模型,标签和照片,它们具有多对多关系,如下所示:

tag_identifier = db.Table('tag_identifier',
                          db.Column('photo_id', db.Integer, db.ForeignKey('photo.id')),
                          db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))
                         )

class Tag(db.Model):
  id = db.Column(db.Integer, primary_key=True)

class Photo(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  tags = db.relationship('Tag', secondary=tag_identifier,
                         backref=db.backref('photos', lazy='dynamic'), lazy='dynamic')

我正在尝试查询具有多个特定标签的所有照片。例如,如果我要查询所有照片<Tag 1> and <Tag 2>:


Photo.query.join(Photo.tags).filter(Tag.id==1).all()会回来

[<Photo 1>, <Photo 2>, <Photo 3>, <Photo 4>], and

Photo.query.join(Photo.tags).filter(Tag.id==2).all()会回来

[<Photo 1>, <Photo 2>, <Photo 5>, <Photo 6>].


在这个例子中,我需要做什么操作才能得到以下结果:[<Photo 1>, <Photo 2>]


q = (Photo.query
     .filter(Photo.tags.any(Tag.id == 1))
     .filter(Photo.tags.any(Tag.id == 2))
     )

请注意,您还可以检查名称:

tag1, tag2 = 'tag1', 'tag2'
q = (Photo.query
     .filter(Photo.tags.any(Tag.name == tag1))
     .filter(Photo.tags.any(Tag.name == tag2))
     )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask-SQLAlchemy:通过一个关系进行多个过滤器 的相关文章

随机推荐