отношение колбы возвращает объект запроса вместо данных

#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 возвращаемый результат напрямую, а не объект запроса