Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python mongoengine的Flask管理员-如何设置“;持久性过滤器&x201D;看风景?_Python_Mongoengine_Flask Admin - Fatal编程技术网

Python mongoengine的Flask管理员-如何设置“;持久性过滤器&x201D;看风景?

Python mongoengine的Flask管理员-如何设置“;持久性过滤器&x201D;看风景?,python,mongoengine,flask-admin,Python,Mongoengine,Flask Admin,我尝试使用Flask Admin和Mongoengine,我完全被卡住了。我找不到实现“持久过滤器”的解决方案。我的意思是,用户应该只查看视图(列表)中的项并与之交互,这些项是由mongoengine中的自定义查询生成的 如果我有一个模型 class User(Document): name = StringField() days = DecimalField() book = StringField() 我想在第一个视图中根据特定用户仅显示书籍,我将执行以下查询:

我尝试使用Flask Admin和Mongoengine,我完全被卡住了。我找不到实现“持久过滤器”的解决方案。我的意思是,用户应该只查看视图(列表)中的项并与之交互,这些项是由mongoengine中的自定义查询生成的

如果我有一个模型

class User(Document):
    name = StringField()
    days = DecimalField()
    book = StringField()
我想在第一个视图中根据特定用户仅显示书籍,我将执行以下查询:

user_peter = User.objects(name=’Peter’)
overdue_books = User.objects(name=’Peter’, days__gt=28)
如果我想给彼得看过期的书,我会问:

user_peter = User.objects(name=’Peter’)
overdue_books = User.objects(name=’Peter’, days__gt=28)
如何在自定义flask管理视图中实现这一点?我必须在ModelView中设置什么

Class LentBooks(ModelView):
    menu_class_name=”Your Books”
    #???

Class OverdueBooks(ModelView):
    menu_class_name=”Overdue Books”
    #???
还是我必须把它放在这里

Admin.add_view(LentBooks(model=User, #???))
对于SQLAlchemy,有很多方法,但mongoengine没有。请帮忙

我在flask_admin.contrib.mongoengine.filters中找到了

class FilterEqual(BaseMongoEngineFilter):
    def apply(self, query, value):
        flt = {'%s' % self.column.name: value}
        return query.filter(**flt)

    def operation(self):
        return lazy_gettext('equals')
但如何实现这一点呢

谢谢你pjcunningham

以下是一个小型测试源中来自pjcunningham的解决方案:

from flask import Flask
import flask_admin as admin
from flask_mongoengine import MongoEngine
from flask_admin.contrib.mongoengine import ModelView

app = Flask(__name__)

app.config['SECRET_KEY'] = '1234567890'
app.config['MONGODB_SETTINGS'] = {'db': 'library'}

db = MongoEngine()
db.init_app(app)

class User(db.Document):
    name = db.StringField()
    days = db.DecimalField()
    book = db.StringField()

class OverdueBooks(ModelView):
    def get_query(self):
        overdue_books = User.objects(name='Peter', days__gt=28)
        return overdue_books

if __name__ == '__main__':

    admin = admin.Admin(app, 'Example: Library')

    admin.add_view(OverdueBooks(model=User, name='Library'))

    app.run(debug=True)
在MongoDB中:

{ "_id" : ObjectId("5815f403e198515188860e3c"), "name" : "Jane", "days" : 21, "book" : "Testbook1" }
{ "_id" : ObjectId("5815f416e198515188860e3d"), "name" : "Peter", "days" : 30, "book" : "Testbook2" }

非常感谢!它起作用了

覆盖视图中的
获取查询。e、 g

class OverdueBooks(ModelView):

    def get_query(self):            
        overdue_books = User.objects(name=’Peter’, days__gt=28)
        return overdue_books

非常感谢。我可以问你,我在哪里可以找到关于“使用查询过滤”主题的更多信息?@Henrich Schlegal-我在源代码中找到了一个简短的注释。mongoengine也有类似的说明,只是您不必重写
get\u count\u query
。每个示例都是关于SQLAlchemy的!亚马逊上只有一本关于Mongoengine的书,那是葡萄牙语的!学习mongoengine很难。再次感谢@如果您不介意通读源代码,HeinrichSchlegel是开始学习Flask/MongoDB/Flask Admin的好地方。我从这个项目中学到了很多,尽管我主要使用SQLAlchemy和Flask。