是否可以在sqlalchemy orm中运行.filter()方法以确定一个列表(多对多关系)中的任何项是否在另一个列表(多对多)中?
例如,我有以下模型及其之间的关系:
用户模型(其follow_countries字段与国家/地区模型具有多对多关系)
国家模型
文章模型(具有与“国家/地区”模型有多对多关系的country_tags字段)
我的问题是“有没有一种方法可以选择用户在followed_countries中关注的country_tags中具有任何国家/地区的文章? (基本上是2个列表之间的交集)”
代码片段(如果需要):
country_follower_relation = db.Table(
'country_follower',
db.Column('user_id', db.Integer, db.ForeignKey('user.id'),
primary_key=True),
db.Column('country_id', db.Integer, db.ForeignKey('country.id'),
primary_key=True))
country_articletags_relation = db.Table(
'country_tag',
db.Column('article_id', db.Integer, db.ForeignKey('article.id'),
primary_key=True),
db.Column('country_id', db.Integer, db.ForeignKey('country.id'),
primary_key=True))
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
followed_countries = db.relationship(
'Country', secondary=country_follower_relation, lazy=True,
backref='followers')
class Country(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60), index=True, unique=True)
class Article(db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.Text(100000), nullable=False)
title = db.Column(db.String(200), nullable=False)
country_tags = db.relationship(
'Article', secondary=country_articletags_relation, lazy='dynamic',
backref='articles', cascade='all')
答案 0 :(得分:0)
您可以使用 this method。示例:
articles = session.query(Article).filter(Article.country_tags.overlap(user.followed_countries)).all()