#python #flask #flask-sqlalchemy #relationship
Вопрос:
У меня есть две модели, имеющие отношение «один ко многим» между ними
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer(), primary_key=True)
username = db.Column(db.String(40))
posts = db.relationship(
'Post',
backref='user',
lazy='dynamic'
)
def __init__(self, username):
self.username = username
def __repr__(self):
return f'<User {self.username}>'
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.String(50))
user_id = db.Column(db.Integer(), db.ForeignKey('users.id'))
def __init__(self, title, user_id):
self.title = title
self.user_id = user_id
def __repr__(self):
return f'<Post {self.title}>'
Я создал примеры записей в обеих таблицах
, когда я пытаюсь получить доступ к пользователю поста, он работает нормально
post.user
output : <User jon Dove>
Но когда я пытаюсь получить доступ к сообщениям пользователя, он возвращает объект запроса вместо данных
user.posts
output : <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x7f2fe1ad2c10>
затем мне нужно что-то сделать .all()
, чтобы получить фактические данные. Вот как работают отношения (если да, то зачем post.user
возвращать данные вместо объекта запроса), или я здесь что-то делаю не так?
Комментарии:
1. Да, потому что вы установили
lazy=dynamic
2. @roganjosh так
lazy=dynamic
работает только в одну сторону? какpost.user
возвращаемый результат напрямую, а не объект запроса