如何在Flask Admin中的* -to-Many关系模型视图中进行自定义查询?
作者:互联网
我从Flask Admin开始,我遇到了一个无法解决的问题,即使经过几个小时的寻找方法在文档中解决它.
为了更多的理解,我更改了实体的名称,但这是完全相同的问题.
我与实体用户和实体之间存在多对多关系(我的问题与一对多关系相同)技能:用户可以拥有多种技能,不同的用户可以拥有相同的技能.
在实体Skill的创建(或版本)页面上,有一个“用户”关系字段.
我有超过10万用户,当我点击该字段时,它真的很慢(由于Javascript搜索脚本).
为了加快速度,我只想搜索“活动”用户(活动是我的SQL数据库中的布尔字段),因为实际上有一些活跃的用户,我永远不会为非活动用户添加技能.
我怎样才能做到这一点 ?
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,sqlalchemy,flask,flask-admin 来源: https://codeday.me/bug/20190727/1558415.html