如何使用flask_pymongo和flask_admin
添加管理员```
from flask import Flask
from flask_pymongo import PyMongo
from bson import json_util
from bson.objectid import ObjectId
import flask_admin as admin
from wtforms import form, fields
from flask_admin.form import Select2Widget
from flask_admin.contrib.pymongo import ModelView, filters
from flask_admin.model.fields import InlineFormField, InlineFieldList
from flask_pymongo import PyMongo
# app settings
app = Flask(__name__)
app.config['MONGO_URI'] = 'mongodb://username:passwrod@ds156811.mlab.com:56811/somedb'
app.config['MONGO_CONNECT'] = True
app.secret_key = 'secret'
mongo = PyMongo(app)
db = mongo
class UserForm(form.Form):
name = fields.StringField('Name')
email = fields.StringField('Email')
class UserView(ModelView):
column_list = ('name', 'email')
form = UserForm
admin = admin.Admin(app)
admin.add_view(UserView(db['users']))
```
以下是https://flask-admin.readthedocs.io/en/v1.0.9/db_pymongo/的小例子 这是另一个: https://github.com/flask-admin/flask-admin/tree/master/examples/pymongo
flask-admin社区已使用pymongo
但我想使用flask-pymongo包。
我对大多数代码都没关系,但是在管理页面添加视图会产生问题,admin.add_view()
函数正在创建问题。
问题是如何向管理页面添加视图,通过使用flask-admin和flask-pymongo(pymongo不同)?
被修改: 错误讯息:
TypeError: 'PyMongo' object is not subscriptable
我们使用pymongo得到的对象与我们从pyflask-mongo得到的对象不同,后者负责解决这个问题。
答案 0 :(得分:0)
不确定以下更改是否有帮助,这些实际上只是对您的问题的评论,但由于代表性较低,我无法发表评论。
import flask_admin as admin
我不会将其导入为管理员,因为最后有以下行:
admin = admin.Admin(app)
请尝试以下方法:
from flask_admin import Admin
然后在底线:
admin = Admin(app)
通过这种方式,您不会将admin
用于可能存在问题的多个事项。
编辑:
由于Pymongo对象不是可订阅对象,因此TypeError导致问题所以你可以将最后一个代码改为此,在flask_admin docs中找到它:
admin.add_view(ModelView(User, db.session))
答案 1 :(得分:0)
最后,我无法使用flask_pymongo
和flask-admin
找到解决方案。
我使用pymongo
代替。
我写的代码非常类似于 https://github.com/flask-admin/flask-admin/blob/master/examples/pymongo/app.py
请勿使用上述链接中的requirements.txt文件。安装最新版本的pymongo
。 requirements.txt文件中的指定版本对我不起作用。
答案 2 :(得分:0)
我使用的设置略有不同,但关键在于只是意识到flask_pymongo.PyMongo
是PyMongo
实例的包装器,您可以直接访问它。
在这种情况下,该PyMongo实例位于mongo.db
with app.app_context():
admin = admin.Admin(app)
admin.add_view(UserView(mongo.db['users']))
根据您的设置,您可能需要也可能不需要with app.app_context():
,但我认为值得留下。