python - 如何在 Model View 中对 Flask Admin 中的 *-to-Many 关系进行自定义查询?

标签 python flask sqlalchemy flask-admin

我从 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/

相关文章:

python - 简单函数是线程安全的吗

python - 无法使用 uwsgi 和 Docker 查看我的简单 Flask 应用程序

python - 如何获取所有可用的命令选项来设置环境变量?

python - 是否可以扩展 SQLAlchemy 以添加锁定数据库的功能?

python - 像这样的字符串的正则表达式

Python - 为什么我不能在 print 函数中使用生成器?

python - 在 sqlalchemy 的 having 子句中使用标签

python - flask-login 仅在 get_id() 返回 self.email 时有效

python - IDLE何时隐式打印?

python - Flask app.post 失败