代码之家  ›  专栏  ›  技术社区  ›  Tri

如何使用Flask admin按id分隔视图模型?

  •  0
  • Tri  · 技术社区  · 7 年前

    和使用 烧瓶管理员

    具有 烧瓶登录

    @app.route('/school_admin')
    @login_required
    def school_admin():
        school_data = db.session.query(Student.id, Student.name).filter_by(school_id=current_user.id).all()
        return render_template('school_admin_dashboard.html', school_data=school_data)
    

    但是,因为 烧瓶管理员 自动生成它的表视图,我真的不知道怎么做。。?

    到目前为止,我已经取得了成功 模型视图 这样地:

    class SchoolAdminModelView(sqla.ModelView):
        def is_accessible(self):
            if not current_user.is_active or not current_user.is_authenticated:
                return False
            if current_user.has_role('schooladmin'):
                return True
    
            return False
    
        def _handle_view(self, name, **kwargs):
            if not self.is_accessible():
                if current_user.is_authenticated:
                    # permission denied
                    abort(403)
                else:
                    # login
                    return redirect(url_for('security.login', next=request.url))
    
    class StudentModelView(SchoolAdminModelView):
        pass
    
    admin.add_view(StudentModelView(Student, db.session))
    

    学校id

    我为什么要使用 烧瓶管理员 而不是 使用者 和 超级用户 角色。 而且我有 烧瓶登录 对于使用此应用程序的用户学生的家长。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Joost    7 年前

    假设登录的用户具有 school_id 与他们相关的:

    class SchoolAdminModelView(sqla.ModelView):
        def get_query(self):
            return super(SchoolAdminModelView, self).get_query().filter(School.id == current_user.school_id)
    

    它过滤用于生成表中项目列表的查询。您可能需要根据您的具体需要对其进行一些调整。

        2
  •  0
  •   Tri    7 年前

    here 并稍加修改,这是如何用这种方式分离不同学校之间的数据访问的代码:

    class StudentModelView(sqla.ModelView):
        def get_query(self):
            return Student.query.filter_by(school_id=current_user.id)
    
        def get_count_query(self):
            return self.session.query(func.count('*')).select_from(self.model).filter(
                Student.school_id == current_user.id
            )
    
    推荐文章