我希望使用Flask-SQlAlchemy在Flask-Admin中按日期时间列的时间部分进行过滤 .
我到目前为止的尝试是:
class BaseTimeBetweenFilter(filters.TimeBetweenFilter):
def apply(self, query, value, alias=None):
return query.filter(cast(Doctor.datetime, Time) >= value[0],
cast(Doctor.datetime, Time) <= value[1]).all()
我有时间选择器显示,如果我这样做
print (value[0])
要么
print (value[1])
它按预期打印出输入的时间 . 但是查询无效 .
admin-panel_1 | response = self.full_dispatch_request()admin-panel_1 |文件“/usr/local/lib/python3.5/dist-packages/flask/app.py”,第1641行,在full_dispatch_request中admin-panel_1 | rv = self.handle_user_exception(e)admin-panel_1 |文件“/usr/local/lib/python3.5/dist-packages/flask/app.py”,第1544行,在handle_user_exception中admin-panel_1 | reraise(exc_type,exc_value,tb)admin-panel_1 |文件“/usr/local/lib/python3.5/dist-packages/flask/_compat.py”,第33行,重新加入admin-panel_1 |提升值admin-panel_1 |文件“/usr/local/lib/python3.5/dist-packages/flask/app.py”,第1639行,在full_dispatch_request中admin-panel_1 | rv = self.dispatch_request()admin-panel_1 |在dispatch_request admin-panel_1中输入文件“/usr/local/lib/python3.5/dist-packages/flask/app.py”,第1625行 . return self.view_functionsrule.endpoint admin-panel_1 |文件“/usr/local/lib/python3.5/dist-packages/flask_admin/base.py”,第69行,位于内部admin-panel_1 | return self._run_view(f,* args,** kwargs)admin-panel_1 | _run_view admin-panel_1中的文件“/usr/local/lib/python3.5/dist-packages/flask_admin/base.py”,第368行return fn(self,* args,** kwargs)admin-panel_1 |在index_view admin-panel_1中输入文件“/usr/local/lib/python3.5/dist-packages/flask_admin/model/base.py”,第1818行 . view_args.search,view_args.filters)admin-panel_1 |在get_list admin-panel_1中输入文件“/usr/local/lib/python3.5/dist-packages/flask_admin/contrib/sqla/view.py”,第975行 . count = count_query.scalar()if count_query else否admin-panel_1 | AttributeError:'list'对象没有属性'scalar'
另外,我从sqlalchemy导入时间和演员,这是好还是我应该从flask-sqlalchemy获取它?
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Time, cast
1 回答
Flask-Admin通过连接表,应用过滤器和排序来构造查询 . 完成所有这些过程之后,它会调用查询本身并获取其结果 .
您的
apply
方法应该返回sqlalchemy.orm.query.Query
实例作为query
参数获取的实例 . 当您添加.all()
方法时,将调用此查询,并将查询结果作为列表获取 . 从结果值中删除.all()
调用,您的过滤器应该有效:进口来源并不重要 .
flask_sqlalchemy.SQLAlchemy
实例包含与sqlalchemy
相同的对象: