我想按表上多对多关系的计数进行排序。
我的出发点是对该主题的(优秀)回应。然而,就我而言,涉及第三个表,我需要我的反向引用是“连接”而不是“动态”。
当我尝试解决该问题时,这两个更改的组合会导致编程错误。
这是我的设置。我在用户和帖子之间有相同的多对多关系。我的帖子和标题之间也有一对多的关系。我想要的是按喜欢每个帖子的用户数量排序的所有帖子的列表。
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.orm import relationship, backref
from sqlalchemy import func
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://xxx'
db = SQLAlchemy(app)
likes = db.Table('likes',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('post_id', db.Integer, db.ForeignKey('post.id')))
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20))
def __repr__(self):
return "<User('%s')>" % self.username
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255))
likes = db.relationship('User', secondary=likes,
backref=db.backref('posts', lazy='joined'))
def __repr__(self):
return "<Post('%s')>" % self.title
class Heading(db.Model):
id = …Run Code Online (Sandbox Code Playgroud) 这是我的代码,它正在工作(返回所有难以排序的问题):
def get_noteworthy_problems(self):
ACategory = aliased(Category)
AProblem = aliased(Problem)
all_prob = DBSession.query(AProblem).filter(
AProblem.parent_id == ACategory.id,
ACategory.parent_id == self.id)
noteworthy_problems = \
sorted(all_prob, key=lambda x: x.difficulty(), reverse=True)
return noteworthy_problems
Run Code Online (Sandbox Code Playgroud)
但我想我必须优化这段代码.是否有可能更改代码order_by和我的功能difficulty()?我的函数返回一个数字.我尝试过类似的东西:
result = DBSession.query(AProblem).filter(
AProblem.parent_id == ACategory.id,
ACategory.parent_id == self.id).order_by(
AProblem.difficulty().desc())
Run Code Online (Sandbox Code Playgroud)
但我收到错误TypeError: 'NoneType' object is not callable.