Flask sqlalchemy .filter Фильтрация запросов в представлении один - ко многим
Нужна помощь. Как для отношения ОДИН-КО МНОГИМ реализовать запрос. с фильтром по связанным полям.
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
nickname = db.Column(db.String(64), unique = True)
email = db.Column(db.String(120), unique = True)
role = db.Column(db.SmallInteger, default = ROLE_USER)
posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')
def __repr__(self):
return '<User %r>' % (self.nickname)
class Post(db.Model):
id = db.Column(db.Integer, primary_key = True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __repr__(self):
return '<Post %r>' % (self.body)
Интересует как допустим получить список постов для которых user.nikname == 'JON'.
Ответы (1 шт):
Автор решения: basicscode
→ Ссылка
Необходимо определить поле 'user' и связать его с классом User:
class Post(db.Model):
id = db.Column(db.Integer, primary_key = True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime)
user = db.relationship(User, lazy='joined', innerjoin=True)
затем во импортируем view:
from sqlalchemy.orm import joinedload
и получаем список юзеров:
posts = db.session.query(Post).options(joinedload('user')).filter(Post.user.nickname == 'John').all()