У меня возникли проблемы при выполнении идиоматического c соединения с SQLAlchemys DSL. Я хочу получить все сообщения, которые понравились конкретному пользователю, но я не могу получить список сообщений.
Модели
Модель сообщения
class Post(SearchableMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
likes = db.relationship('PostLike', backref='post', lazy='dynamic')
def __repr__(self):
return "<Post {}>".format(self.body)
PostLike Model
class PostLike(db.Model):
__tablename__ = 'post_like'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
Модель пользователя
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
password_hash = db.Column(db.String(128))
posts = db.relationship("Post", backref="author", lazy="dynamic")
about_me = db.Column(db.String(140))
location = db.Column(db.String(100))
is_private = db.Column(db.Boolean, default=False)
mailbox_enabled = db.Column(db.Boolean, default=True)
last_seen = db.Column(db.DateTime, default=datetime.utcnow)
Что я пробовал
user = User.query.filter_by(username=username).first()
# this gets the posts likes successfully
liked_posts = user.liked.order_by(PostLike.timestamp.desc())
# This is where I attempt the join - not working
new_posts = Post.query.join(
"liked_posts", Post.id == liked_posts
)
print(new_posts)