我从 Flask Admin 开始,我有一个我无法解决的问题,即使在几个小时后在文档中寻找解决它的方法也是如此。
为了更好地理解,我更改了实体的名称,但这是完全相同的问题。
我在实体用户和实体技能之间存在多对多关系(我的问题与一对多关系相同):一个用户可以拥有多种技能,不同的用户可以拥有相同的技能。
在创建(或编辑)实体技能的页面上,有一个“用户”关系字段。
我有超过 100,000 个用户,当我点击该字段时它真的很慢(由于 Javascript 搜索脚本)。
为了加快速度,我只想搜索“活跃”用户(活跃是我的 SQL 数据库中的 bool 字段),因为活跃用户确实很少,我永远不会向不活跃用户添加技能.
我该怎么做?
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.admin.contrib.sqla import ModelView
from flask.ext.admin import Admin
app = Flask(__name__)
db = SQLAlchemy(app)
admin = Admin(app)
association_table = db.Table(
'user_skill',
db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
db.Column('skill_id', db.Integer, db.ForeignKey('skill.id'), primary_key=True)
)
class Skill(db.Model):
name = db.Column(db.String(30), nullable=True)
class User(db.Model):
username = db.Column(db.String(30), nullable=True)
skills = db.relationship(
'Skill',
secondary=association_table,
backref='users'
)
class SkillView(ModelView):
# Something like that
form_relationship_query = {'users': lambda query: query.filter_by(active=True).all()}
admin.add_view(SkillView(Skill, db.session))
最佳答案
我想你错过了 Flask-Admin default filters .所以在你的情况下,它应该是:
class SkillView(ModelView):
def get_query(self):
return self.session.query(self.model).filter(self.model.active == True)
def get_count_query(self):
return self.get_query().count()
关于python - 如何在 Model View 中对 Flask Admin 中的 *-to-Many 关系进行自定义查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713829/