postgres 数据库视图上的 Flask Admin
Flask Admin on postgres database view
有没有办法在数据库视图的 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.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 数据库视图设置了管理员,但直到现在我还无法在 Flask 中进行设置。有线索吗?
我认为如果您 post 定义模型的文件的其余部分会有所帮助。您可能扩展了错误的 class(sqa.Model)。
您的 ModelView
也没有列出任何列。我认为这可能是必需的?
Here's 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')
是否有创建抽象模型的理由? __abstract__
属性设置为 True
是此错误的原因。如果你不从这个模型继承你不需要它:
class StudentView(sqa.Model):
__tablename__ = 'test_view'
id = sqa.Column(sqa.Integer, primary_key=True)
name = sqa.Column(sqa.String)
age = sqa.Column(sqa.Integer)
score = sqa.Column(sqa.Integer)
此外,SQLAlchemy 映射器需要一个主键(在模型中而不是在实际视图中)。该应用程序会将您的视图视为 table,因此它不会在不尝试更新视图时立即产生数据库错误。
管理员视图可以通过 Python 中的 sandman 库实现。这是 sandman
的 link
这是使用 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
查看您的管理门户
有没有办法在数据库视图的 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.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 数据库视图设置了管理员,但直到现在我还无法在 Flask 中进行设置。有线索吗?
我认为如果您 post 定义模型的文件的其余部分会有所帮助。您可能扩展了错误的 class(sqa.Model)。
您的 ModelView
也没有列出任何列。我认为这可能是必需的?
Here's 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')
是否有创建抽象模型的理由? __abstract__
属性设置为 True
是此错误的原因。如果你不从这个模型继承你不需要它:
class StudentView(sqa.Model):
__tablename__ = 'test_view'
id = sqa.Column(sqa.Integer, primary_key=True)
name = sqa.Column(sqa.String)
age = sqa.Column(sqa.Integer)
score = sqa.Column(sqa.Integer)
此外,SQLAlchemy 映射器需要一个主键(在模型中而不是在实际视图中)。该应用程序会将您的视图视为 table,因此它不会在不尝试更新视图时立即产生数据库错误。
管理员视图可以通过 Python 中的 sandman 库实现。这是 sandman
的 link这是使用 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