【发布时间】:2015-07-09 00:12:23
【问题描述】:
我有两个模型,标签和照片,它们具有像这样的多对多关系:
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> 和 <Tag 2>查询所有照片:
Photo.query.join(Photo.tags).filter(Tag.id==1).all() 会返回
[<Photo 1>, <Photo 2>, <Photo 3>, <Photo 4>],和
Photo.query.join(Photo.tags).filter(Tag.id==2).all() 会返回
[<Photo 1>, <Photo 2>, <Photo 5>, <Photo 6>].
在此示例中,我需要执行哪些操作才能获得以下结果:
[<Photo 1>, <Photo 2>]
【问题讨论】:
-
你试过了吗,
Photo.query.join(Photo.tags).filter(Tag.id==1).filter(Tag.id==2).all()。 -
@jonnybazookatone 是的,它返回一个空列表。使用
and_也是如此。 -
当然,我的错误 ;-),因为你已经有 Tag.id==1。
标签: python flask sqlalchemy flask-sqlalchemy