【发布时间】:2019-07-02 15:43:05
【问题描述】:
我正在使用 Flask-SQLAlchemy 实现博客文章类型的 Flask 应用程序。
我正在尝试根据收到的每篇博文的总点赞数来排序博文。我尝试使用带有查询session.query(Post).order_by(Post.likes_count.desc()).all() 的 SQLALchemy 混合属性,这类似于之前提出的问题的解决方案here
它抛出错误AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Post.likes has an attribute 'count'
有没有办法使用需要提供给分页功能的喜欢计数来获取帖子顺序。
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20))
email = db.Column(db.String(120))
likes = db.relationship('Like', backref='user',lazy='dynamic',foreign_keys='Like.user_id')
def __repr__(self):
return f"User('{self.username}', '{self.email}')"
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
date_posted = db.Column(db.DateTime, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
likes = db.relationship('Like', backref='post', lazy='dynamic')
@hybrid_property
def likes_count(self):
return self.likes.count()
def __repr__(self):
return f"Post('{self.title}', '{self.date_posted}')"
class Like(db.Model):
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'))
这个问题类似于How to order by count of many-to-many relationship in SQLAlchemy? 但是我无法使用答案/cmets 中提到的len 或count() 方法获得查询结果。
【问题讨论】:
标签: python sqlalchemy