【发布时间】:2019-11-16 13:33:16
【问题描述】:
我对烧瓶和 sql-alchemy 比较陌生。我在处理不同模型之间的关系时遇到了麻烦。具体来说,我正在尝试将喜欢特定帖子的用户的用户名打印到前端 HTML。
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
posts = db.relationship('Post', backref='author', lazy=True)
posts = db.relationship('Post', backref='author', primaryjoin="User.id==Post.author_id")
...
liked = db.relationship(
'PostLike',
foreign_keys='PostLike.user_id',
backref='user', lazy='dynamic')
def like_post(self, post):
if not self.has_liked_post(post):
like = PostLike(user_id=self.id, post_id=post.id)
db.session.add(like)
def unlike_post(self, post):
if self.has_liked_post(post):
PostLike.query.filter_by(
user_id=self.id,
post_id=post.id).delete()
def has_liked_post(self, post):
return PostLike.query.filter(
PostLike.user_id == self.id,
PostLike.post_id == post.id).count() > 0
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'))
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
author_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
recipient_id = db.Column(db.Integer, db.ForeignKey('user.id'))
likes = db.relationship('PostLike', backref='post', lazy='dynamic')
...
在我的烧瓶应用程序中,当打印帖子时,我希望能够显示帖子喜欢者的用户名。我已经能够让like函数工作并显示喜欢的数量,通过:
{{ post.likes.count() }}
通过 HTML 前端中的 jinja2。
【问题讨论】:
标签: python flask sqlalchemy flask-sqlalchemy