在postgres数据库视图上的Flask Admin

时间:2017-03-10 15:58:54

标签: python postgresql flask flask-admin

有没有办法在数据库视图上创建Flask-Admin的管理员视图?我使用Postgres并创建了一个视图,让我们以下面的例子为例:

CREATE VIEW test_view AS (
    SELECT id, name, age, score
    FROM student
);

如果我想为此设置管理员视图,我该怎么做?

我尝试为它创建一个抽象模型:

class StudentView(sqa.Model):
    __abstract__ = True
    __tablename__ = 'test_view'

    id = sqa.Column(sqa.Integer)
    name = sqa.Column(sqa.String)
    age = sqa.Column(sqa.Integer)
    score = sqa.Column(sqa.Integer)

并添加了这样的管理视图:

from flask_admin.contrib.sqla import ModelView

class StudentViewAdmin(ModelView):
    _model = models.StudentView

将此管理员视图注册到admin:

admin.add_view(admin_views.StudentViewAdmin(admin_views.DashboardView123._model, db.session))

但是,在将视图添加到管理员时,我收到了以下错误:

Traceback (most recent call last):
  File "manage.py", line 8, in <module>
    setup_admin(app)
  File "/Users/rohitjain/app.py", line 35, in setup_admin
    admin.add_view(admin_views.StudentViewAdmin(admin_views.StudentViewAdmin._model, db.session))
  File "/Users/rohitjain/.venvs/venv/lib/python3.5/site-packages/flask_admin/contrib/sqla/view.py", line 318, in __init__
    menu_icon_value=menu_icon_value)
  File "/Users/rohitjain/.venvs/venv/lib/python3.5/site-packages/flask_admin/model/base.py", line 771, in __init__
    self._refresh_cache()
  File "/Users/rohitjain/.venvs/venv/lib/python3.5/site-packages/flask_admin/model/base.py", line 847, in _refresh_cache
    self._list_columns = self.get_list_columns()
  File "/Users/rohitjain/.venvs/venv/lib/python3.5/site-packages/flask_admin/model/base.py", line 979, in get_list_columns
    only_columns=self.column_list or self.scaffold_list_columns(),
  File "/Users/rohitjain/.venvs/venv/lib/python3.5/site-packages/flask_admin/contrib/sqla/view.py", line 404, in scaffold_list_columns
    for p in self._get_model_iterator():
  File "/Users/rohitjain/.venvs/venv/lib/python3.5/site-packages/flask_admin/contrib/sqla/view.py", line 340, in _get_model_iterator
    return model._sa_class_manager.mapper.iterate_properties
AttributeError: type object 'StudentView' has no attribute '_sa_class_manager'

我们真的可以这样做吗?我已经在Django中完成了这个操作,为postgres db视图设置了admin,但到目前为止我无法在Flask中设置相同的内容。任何线索?

3 个答案:

答案 0 :(得分:2)

是否有理由创建抽象模型?设置为__abstract__的{​​{1}}属性是导致此错误的原因。如果您不是此模型的子类,则不需要它:

True

此外,SQLAlchemy映射器需要一个主键(在模型中不在实际视图中)。应用程序会将您的视图视为一个表,以便在不尝试更新视图时不会产生数据库错误。

答案 1 :(得分:1)

我认为如果你要发布定义模型的文件的其余部分会有所帮助。您可能正在扩展错误的类(sqa.Model)。

您的ModelView也没有列出任何列。我想这可能是必需的?

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Origin flask_admin的hello_world文档。您可以看到他们在ModelView

中明确指定了列,过滤器和可搜索性

<强>摘录:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(128))

class UserView(ModelView):
    # Show only name and email columns in list view
    column_list = ('name', 'email')

    # Enable search functionality - it will search for terms in
    # name and email fields
    column_searchable_list = ('name', 'email')

    # Add filters for name and email columns
    column_filters = ('name', 'email')

答案 2 :(得分:0)

可以使用 Python 中的sandman库实现管理视图。这是sandman

的链接

这里是使用flask-admin的代码。但首先你必须按命令安装库 pip install sandman

from sandman2 import app

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost/testsmsmagic'
#path of your database.

from sandman2.model import activate

activate()

app.run(port=5999)

之后运行该文件,您可以在http://localhost:5999/admin

的浏览器上看到您的管理员门户