Flask应用程序中更智能的sqlalchemy wtf动态过滤器

切特·梅恩泽(Chet Meinzer)

我有一个过滤表的表单,并且我希望表单条目构建一个sqlalchemy语句。

因为我有“无过滤器”选项,所以我不能仅将表单字段放入过滤器(“此处的表单字段”)。但是必须有比进行像这样的每个排列更好的方法

AT= list(set([h.assigned for h in models.Request.query.all()]))
AT.append('No Filter')
form.assigned.choices=zip(AT,AT)
requestlist= models.Request.query.all() 
if form.validate_on_submit():

    if form.status.data=='No Filter' and form.assigned.data=='No Filter' and form.requestor.data=='No Filter':
            requestlist= models.Request.query.all() 
    elif form.status.data != 'No Filter' and form.assigned.data=='No Filter' and form.requestor.data=='No Filter':
        requestlist = db.session.query(models.Request).filter(models.Request.status.like(form.status.data)).all()
    elif form.status.data == 'No Filter' and form.assigned.data!='No Filter' and form.requestor.data=='No Filter':
        requestlist = db.session.query(models.Request).filter(models.Request.assigned.like(form.assigned.data)).all()
    elif form.status.data == 'No Filter' and form.assigned.data=='No Filter' and form.requestor.data!='No Filter':
        requestlist = db.session.query(models.Request).filter(models.Request.requestedBy.like(form.requestor.data)).all()
    elif form.status.data != 'No Filter' and form.assigned.data=='No Filter' and form.requestor.data!='No Filter':
        requestlist = db.session.query(models.Request).filter(models.Request.requestedBy.like(form.requestor.data))\
        .filter(models.Request.status.like(form.status.data)).all()
    elif form.status.data == 'No Filter' and form.assigned.data !='No Filter' and form.requestor.data!='No Filter':
        requestlist = db.session.query(models.Request).filter(models.Request.requestedBy.like(form.requestor.data))\
        .filter(models.Request.assigned.like(form.assigned.data)).all()
    elif form.status.data != 'No Filter' and form.assigned.data !='No Filter' and form.requestor.data =='No Filter':
        requestlist = db.session.query(models.Request).filter(models.Request.status.like(form.status.data))\
        .filter(models.Request.assigned.like(form.assigned.data)).all()
    elif form.status.data != 'No Filter' and form.assigned.data !='No Filter' and form.requestor.data !='No Filter':
        requestlist = db.session.query(models.Request).filter(models.Request.status.like(form.status.data))\
        .filter(models.Request.requestedBy.like(form.requestor.data))\
        .filter(models.Request.assigned.like(form.assigned.data)).all()

您可以filter(...)一个接一个地添加多个子句:

if form.validate_on_submit():
    requestlist = models.Request.query

    if form.status.data != 'No Filter':
        requestlist = requestlist.filter(models.Request.status.like(form.status.data))

    if form.assigned.data != 'No Filter':
        requestlist = requestlist.filter(models.Request.assigned.like(form.assigned.data))

    if form.requestor.data != 'No Filter':
        requestlist = requestlist.filter(models.Request.requestedBy.like(form.requestor.data))

    return requestlist.all()

或更笼统地说,您可以执行以下操作:

field_names = ['status', 'assigned', 'requestor']
if form.validate_on_submit():
    requestlist = models.Request.query

    for field in field_names:
        f_value = getattr(form, field).data
        if f_value != 'No Filter':
            requestlist = requestlist.filter(getattr(models.Request, field).like(f_value))

    return requestlist.all()

我看到的唯一问题是,有时表单和模型上的名称不匹配。一个示例是requestedByrequestor在这种情况下,您可以定义字典而不是中的列表field_names

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQLAlchemy-“动态过滤器”

来自分类Dev

动态应用多个CSS过滤器

来自分类Dev

SwiftUI中的动态过滤器(谓词)

来自分类Dev

XMLView 绑定中的动态过滤器

来自分类Dev

在 scipys ndimage 过滤器中动态改变过滤器大小

来自分类Dev

在ng-repeat中动态应用格式过滤器

来自分类Dev

动态注入SVG过滤器并应用于HTML

来自分类Dev

AngularJS 过滤器根据表达式动态应用

来自分类Dev

在AngularJS中动态使用orderBy过滤器

来自分类Dev

如何动态禁用ng-repeat中的过滤器

来自分类Dev

基于angularjs中过滤器的动态列

来自分类Dev

如何在Excel中创建动态过滤器?

来自分类Dev

如何在AngularJS中动态分配过滤器

来自分类Dev

基于Django中字段的动态范围过滤器

来自分类Dev

使用动态过滤器聚合R Shiny中的数据

来自分类Dev

如何使动态查询过滤器在pyspark中运行?

来自分类Dev

Django-网页中的动态过滤器

来自分类Dev

Django-网页中的动态过滤器

来自分类Dev

如何在SSRS中设置动态过滤器

来自分类Dev

如何在Excel中创建动态过滤器?

来自分类Dev

如何动态禁用ng-repeat中的过滤器

来自分类Dev

基于angularjs中过滤器的动态列

来自分类Dev

Django中的动态过滤器选择字段

来自分类Dev

查找视图过滤器条件中的动态值

来自分类Dev

动态将Servlet过滤器添加到Grails应用程序

来自分类Dev

R Shiny 应用程序中的外部过滤器

来自分类Dev

sqlalchemy与过滤器的关系

来自分类Dev

通过C#中的动态过滤器查询过滤复杂的JSON

来自分类Dev

如何在Flask中为动态生成的jinja2模板注册过滤器?